Мне нужно создать прокси для проекта Flash Player, над которым я работаю. Мне просто нужно сделать HTTP-запрос GET с аутентификацией HTTP-Basic на другой URL-адрес и передать ответ от PHP, как если бы PHP файл был исходным исходным кодом. Как я могу это сделать?
Выполнение запроса HTTP GET с проверкой подлинности HTTP-Basic
Ответ 1
Используя file_get_contents()
с stream
для указания учетных данных HTTP или используйте curl
и CURLOPT_USERPWD
.
Ответ 2
Марк Б отлично справился с этим вопросом. Недавно я взял его подход и хотел поделиться полученным кодом.<?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);
?>
Я надеюсь, что это полезно людям!
Ответ 3
Я взял код @clone45 и несколько раз превратил его в ряд функций как Python requests интерфейс (достаточно для моих целей), используя только внешний код. Может быть, это может помочь кому-то другому.
Он обрабатывает:
- basic auth
- заголовки
- 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;
}
Ответ 4
Если у вас клиентская библиотека cURL, запеченная в вашей сборке PHP, вы можете использовать принятый ответ на этот вопрос, не устанавливая ничего другого.
И Yahoo опубликовала учебник по использованию PHP для доступа к своим API-интерфейсам RESTful, и хотя это не касается конкретно базовой проверки подлинности, имеет дело с основами использования PHP с cURL, поэтому вы можете найти его полезным.
Ответ 5
Вы действительно хотите использовать php для этого?
простой javascript script делает это:
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;
}