Выполнение запроса HTTP GET с аутентификацией HTTP-Basic - PullRequest
25 голосов
/ 12 октября 2011

Мне нужно создать прокси для проекта Flash Player, над которым я работаю. Мне просто нужно сделать запрос HTTP GET с аутентификацией HTTP-Basic на другой URL-адрес и обработать ответ от PHP, как если бы файл PHP являлся исходным источником. Как я могу это сделать?

Ответы [ 4 ]

83 голосов
/ 05 февраля 2014

Марк Б отлично справился с ответом на этот вопрос.Я недавно воспользовался его подходом и хотел поделиться полученным кодом.

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

?>

Я надеюсь, что это полезно для людей!

13 голосов
/ 12 октября 2011

Используя file_get_contents() с stream для указания учетных данных HTTP, или используйте curl и CURLOPT_USERPWD опция.

1 голос
/ 02 ноября 2016

Я взял код @ clone45 и превратил его в ряд функций как запросы Python интерфейс (достаточно для моих целей) без использования только внешнего кода. Может быть, это может помочь кому-то еще.

Он обрабатывает:

  • базовая аутентификация
  • заголовки
  • GET Params

Использование:

$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;
}
0 голосов
/ 12 октября 2011

Вы действительно хотите использовать php для этого?

, это делает простой скрипт на JavaScript:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...