Мне нужно создать прокси для проекта Flash Player, над которым я работаю. Мне просто нужно сделать HTTP-запрос GET с аутентификацией HTTP-Basic на другой URL-адрес и передать ответ от PHP, как если бы PHP-файл был исходным исходным кодом. Как я могу это сделать?
Использование file_get_contents()
с stream
для указания учетных данных HTTP или использование curl
и CURLOPT_USERPWD
.
Марк Б отлично справился с этим вопросом. Недавно я взял его подход и хотел поделиться полученным кодом.
<?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); ?>
Я надеюсь, что это полезно людям!
Я взял код @ clone45 и превратил его в ряд функций, подобных интерфейсу запросов Python (достаточно для моих целей), используя только внешний код. Может быть, это может помочь кому-то другому.
Он обрабатывает:
$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; }
Если у вас есть клиентская библиотека cURL, запеченная в вашей сборке PHP, вы можете использовать принятый ответ для этого вопроса, не устанавливая ничего другого.
И Yahoo опубликовал учебник по использованию PHP для доступа к своим API RESTful, и хотя он не имеет особого отношения к Basic Authentication, он имеет дело с основами использования PHP с cURL, поэтому вы можете найти его полезным.
Вы действительно хотите использовать php для этого?
простой скрипт javascript делает это:
function login(username, password, url) { var http = getHTTPObject(); http.open("get", url, false, username, password); http.send(""); //alert ("HTTP status : "+http.status); if (http.status == 200) { //alert ("New window will be open"); window.open(url, "My access", "width=200,height=200", "width=300,height=400,scrollbars=yes"); //win.document.location = url; } else { alert("No access to the secured web site"); } } function getHTTPObject() { var xmlhttp = false; if (typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } else { /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @end @*/ } return xmlhttp; }