使用PHP,是否可以發送帶有file_get_contents()
的HTTP標頭?PHP file_get_contents()和設置請求標頭
我知道你可以從你的php.ini
文件發送用戶代理。但是,您是否也可以將HTTP_ACCEPT
,HTTP_ACCEPT_LANGUAGE
和HTTP_CONNECTION
等其他信息與file_get_contents()
一起發送?
或者還有其他功能可以實現這個功能嗎?
使用PHP,是否可以發送帶有file_get_contents()
的HTTP標頭?PHP file_get_contents()和設置請求標頭
我知道你可以從你的php.ini
文件發送用戶代理。但是,您是否也可以將HTTP_ACCEPT
,HTTP_ACCEPT_LANGUAGE
和HTTP_CONNECTION
等其他信息與file_get_contents()
一起發送?
或者還有其他功能可以實現這個功能嗎?
事實上,在上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);
您可以按照這個模式來實現你追求什麼,我的天堂」不過親自測試了一下。 (如果它不工作,隨時檢查出我的其他答案)
不幸的是,它看起來不像file_get_contents()
真的提供了這種程度的控制。 cURL擴展通常是第一個出現的,但我強烈建議使用PECL_HTTP擴展(http://pecl.php.net/package/pecl_http)來實現非常簡單和直接的HTTP請求。 (與cURL一起工作要容易得多)
使用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);
?>
您展示的代碼片段很容易用'file_get_contents'來實現,而且我還沒有遇到一個只能用cURL實現的用例。 – Gordon
是的。
當一個URL調用的file_get_contents,應該使用stream_create_context功能,這是在php.net
這是在用戶評論或多或少與覆蓋下頁在php.net相當有據可查部分:http://php.net/manual/en/function.stream-context-create.php
你可以展示一個例子,而不是隻是連接異地? – Gordon
您可以使用此變量在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"
}
這根本不回答問題。 – Gordon
也許不是,但它回答了標題中隱含的相反問題,即如何從file_get_contents讀取響應頭。這是谷歌在調查這個問題時所在的地方。 –
這裏是我工作(多米尼克只是一個線路短路)。
$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);
另請參閱:http://docs.php.net/context和http://docs.php.net/stream_context_create – VolkerK
這是本頁唯一有用的答案 – Gordon
我希望更多的人在這裏給出這個問題的實際答案而不是隻指向cURL頁面。謝謝。 – Merijn