web-dev-qa-db-de.com

Eine HTTP GET-Anforderung mit HTTP-Basic-Authentifizierung durchführen

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?

22
Naftuli Kay

Verwenden Sie file_get_contents() mit einer stream , um die HTTP-Anmeldeinformationen anzugeben, oder verwenden Sie curl und die Option CURLOPT_USERPWD .

13
Marc B

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!

78
clone45

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:

  • grundlegende Auth
  • Überschriften
  • GET Params

Verwendungszweck:

$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);

Definitionen

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;
}
1
Ben