低调的斑马 · eclipse断点调试 - CSDN文库· 4 月前 · |
豪爽的金针菇 · 安装kibana_kibana启动很慢-CS ...· 4 月前 · |
温文尔雅的生姜 · mssql sqlserver ...· 6 月前 · |
坚强的山楂 · Thingsboard ...· 6 月前 · |
力能扛鼎的酱肘子 · 如何在mongodb中级联删除文档?-腾讯云 ...· 10 月前 · |
在PHP中,有没有可能用
file_get_contents()
发送HTTP头?
我知道您可以从
php.ini
文件中发送用户代理。但是,您还可以使用
file_get_contents()
发送
HTTP_ACCEPT
、
HTTP_ACCEPT_LANGUAGE
和
HTTP_CONNECTION
等其他信息吗?
或者,有没有其他函数可以实现这一点?
不幸的是,
file_get_contents()
看起来并没有真正提供这种程度的控制。cURL扩展通常是第一个出现的,但是对于非常简单和直接的PECL_HTTP请求,我强烈推荐使用
http://pecl.php.net/package/pecl_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()
函数时:
// Create a stream
$opts = [
"http" => [
"method" => "GET",
"header" => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
// DOCS: https://www.php.net/manual/en/function.stream-context-create.php
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
// DOCS: https://www.php.net/manual/en/function.file-get-contents.php
$file = file_get_contents('http://www.example.com/', false, $context);
你也许能够遵循这个模式来实现你所寻求的目标,但我还没有亲自测试过。(如果它不起作用,请随时查看我的另一个答案)
如果你不需要HTTPS,并且curl在你的系统上不可用,你可以使用
fsockopen
此函数打开一个连接,您可以从该连接进行读写操作,就像对普通文件句柄所做的那样。
是。
在URL上调用
file_get_contents
时,应该使用
stream_create_context
函数,该函数在php.net上有很好的说明。
在php.net的用户评论部分的以下页面中或多或少准确地介绍了这一点: http://php.net/manual/en/function.stream-context-create.php
您可以使用此变量在
file_get_contents()
函数之后检索响应头部。
代码:
file_get_contents("http://example.com");
var_dump($http_response_header);
输出:
array(9) {
string(15) "HTTP/1.1 200 OK"
string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
string(29) "Server: Apache/2.2.3 (CentOS)"
string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
string(27) "ETag: "280100-1b6-80bfd280""
string(20) "Accept-Ranges: bytes"
string(19) "Content-Length: 438"
string(17) "Connection: close"
string(38) "Content-Type: text/html; charset=UTF-8"
}