PHP file_get_contents()和设置请求标头
用PHP,是否有可能发送HTTP标头file_get_contents()
?
我知道你可以从你的php.ini
文件发送用户代理。 但是,您是否也可以使用file_get_contents()
发送其他信息,例如HTTP_ACCEPT
, HTTP_ACCEPT_LANGUAGE
和HTTP_CONNECTION
?
还是有另一个function,将完成这个?
其实,进一步阅读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);
你也许可以按照这个模式来实现你正在寻找的东西,但是我没有亲自testing过这个。 (如果它不工作,请随时查看我的其他答案)
两年并没有确切的答案,尽pipe多米尼克只是一条短线。
$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" // ie An iPad ) ); $context = stream_context_create($options); $file = file_get_contents($url, false, $context);
您可以使用此variables在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" }
使用php cURL库可能是正确的select,因为这个库比简单的file_get_contents(...)
有更多的function。
一个例子:
<?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); ?>
是。
在url上调用file_get_contents时,应该使用stream_create_context函数,这在php.net上有相当好的logging
这在php.net的用户注释部分或多或less地被覆盖了: http : //php.net/manual/en/function.stream-context-create.php
如果你不需要HTTPS并且curl在你的系统上不可用,你可以使用fsockopen
这个函数打开一个连接,你可以像读一个正常的文件句柄一样读写。
不幸的是,它看起来不像file_get_contents()
真的提供了这种程度的控制。 cURL扩展通常是第一个出现的,但我强烈推荐使用PECL_HTTP扩展( http://pecl.php.net/package/pecl_http )来实现非常简单直接的HTTP请求。 (与cURL一起工作要容易得多)