Ich muss einen Proxy für ein Flash Player-Projekt erstellen, an dem ich gerade arbeite. Ich muss einfach eine HTTP-GET-Anforderung mit HTTP-Basic-Authentifizierung an eine andere URL senden und die Antwort von PHP so senden, als wäre die Datei PHP die ursprüngliche Quelle. Wie kann ich das machen?
Verwenden Sie file_get_contents()
mit einer stream
, um die HTTP-Anmeldeinformationen anzugeben, oder verwenden Sie curl
und die Option CURLOPT_USERPWD
.
Marc B hat diese Frage sehr gut beantwortet. Ich habe vor kurzem seinen Ansatz gewählt und wollte den resultierenden Code teilen.
<?PHP
$username = "some-username";
$password = "some-password";
$remote_url = 'http://www.somedomain.com/path/to/file';
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header' => "Authorization: Basic " . base64_encode("$username:$password")
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($remote_url, false, $context);
print($file);
?>
Ich hoffe, dass dies für die Menschen hilfreich ist!
Ich nahm den Code von @ clone45 und verwandelte ihn etwas in eine Reihe von Funktionen. __Wie Pythons -Anforderungen Vielleicht kann es jemand anderem helfen.
Es behandelt:
$url = 'http://sweet-api.com/api';
$params = array('skip' => 0, 'top' => 5000);
$header = array('Content-Type' => 'application/json');
$header = addBasicAuth($header, getenv('USER'), getenv('PASS'));
$response = request("GET", $url, $header, $params);
print($response);
function addBasicAuth($header, $username, $password) {
$header['Authorization'] = 'Basic '.base64_encode("$username:$password");
return $header;
}
// method should be "GET", "PUT", etc..
function request($method, $url, $header, $params) {
$opts = array(
'http' => array(
'method' => $method,
),
);
// serialize the header if needed
if (!empty($header)) {
$header_str = '';
foreach ($header as $key => $value) {
$header_str .= "$key: $value\r\n";
}
$header_str .= "\r\n";
$opts['http']['header'] = $header_str;
}
// serialize the params if there are any
if (!empty($params)) {
$params_array = array();
foreach ($params as $key => $value) {
$params_array[] = "$key=$value";
}
$url .= '?'.implode('&', $params_array);
}
$context = stream_context_create($opts);
$data = file_get_contents($url, false, $context);
return $data;
}