PHP file_get_contents() и настройки заголовков запросов
С PHP, можно ли отправлять HTTP-заголовки с file_get_contents()
?
Я знаю, что вы можете отправить пользовательский агент из вашего файла php.ini
. Однако вы также можете отправить другую информацию, такую как HTTP_ACCEPT
, HTTP_ACCEPT_LANGUAGE
и HTTP_CONNECTION
с помощью file_get_contents()
?
Или есть еще одна функция, которая выполнит это?
Ответы
Ответ 1
Собственно, после дальнейшего чтения функции file_get_contents()
:
// Create a stream
$opts = [
"http" => [
"method" => "GET",
"header" => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
]
];
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);
Возможно, вы сможете следовать этому шаблону, чтобы достичь того, чего вы ищете, но я лично его не проверял. (и если это не сработает, не стесняйтесь проверить мой другой ответ)
Ответ 2
Вот что сработало для меня (Доминик был всего лишь на одну строку).
$url = "";
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" . // check function.stream-context-create on php.net
"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
)
);
$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);
Ответ 3
Вы можете использовать эту переменную для получения заголовков ответов после функции file_get_contents()
.
код:
file_get_contents("http://example.com");
var_dump($http_response_header);
Вывод:
array(9) {
[0]=>
string(15) "HTTP/1.1 200 OK"
[1]=>
string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
[2]=>
string(29) "Server: Apache/2.2.3 (CentOS)"
[3]=>
string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
[4]=>
string(27) "ETag: "280100-1b6-80bfd280""
[5]=>
string(20) "Accept-Ranges: bytes"
[6]=>
string(19) "Content-Length: 438"
[7]=>
string(17) "Connection: close"
[8]=>
string(38) "Content-Type: text/html; charset=UTF-8"
}
Ответ 4
Использование библиотек php cURL, вероятно, будет правильным путем, так как эта библиотека имеет больше возможностей, чем простой file_get_contents(...)
.
Пример:
<?php
$ch = curl_init();
$headers = array('HTTP_ACCEPT: Something', 'HTTP_ACCEPT_LANGUAGE: fr, en, da, nl', 'HTTP_CONNECTION: Something');
curl_setopt($ch, CURLOPT_URL, "http://localhost"); # URL to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); # return into a variable
curl_setopt($ch, CURLOPT_HTTPHEADER, $header ); # custom headers, see above
$result = curl_exec( $ch ); # run!
curl_close($ch);
?>
Ответ 5
Если вам не нужна HTTPS, и в вашей системе нет завивки, вы можете использовать fsockopen
Эта функция открывает соединение, из которого вы можете читать и писать так же, как и с обычным дескриптором файла.
Ответ 6
Да.
При вызове file_get_contents на URL-адресе следует использовать функцию stream_create_context, которая достаточно хорошо документирована на php.net
Это более или менее точно описано на следующей странице php.net в разделе комментариев пользователей: http://php.net/manual/en/function.stream-context-create.php
Ответ 7
К сожалению, это не похоже, что file_get_contents()
действительно предлагает такую степень контроля. Обычно расширение cURL является первым, но я настоятельно рекомендую расширение PECL_HTTP (http://pecl.php.net/package/pecl_http) для очень простого и простого HTTP-сообщения Запросы. (с ним гораздо проще работать, чем cURL)
Ответ 8
отправить заголовок с помощью команды linux: wget в файле php, например.
exec('wget--referer "www.example.com"');