cURL仅检索标头,而不执行HEAD

时间:2019-06-03 20:39:21

标签: php curl

因此,我尝试使用cURL仅通过以下方式检索标头:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);

问题在于,在尝试获取大文件头时,脚本会使用所有内存。我想避免身体也因此而尝试使用:

curl_setopt($ch, CURLOPT_NOBODY, true);

问题在于,它发出HEAD请求而不是GET。当您向HEAD请求时,某些网站会重新运行错误。

是否可以使用curl来仅检索标头而不执行HEAD请求?

2 个答案:

答案 0 :(得分:0)

首先,不要使用CURLOPT_RETURNTRANSFER,因为这会使整个响应都保存在内存中。

然后,有两个选择:

A)使用写回调,并在返回正文的第一个字节后立即中止传输。 PHP.net文档中有一个write callback example

B)使用CURLOPT_RANGE并仅请求要检索的第一个字节0-0。这样可以避免写回调,但不利之处在于,并非所有HTTP服务器和URL都会对其进行确认。

答案 1 :(得分:0)

如果您不必使用cURL,则可以使用get_headers()。默认情况下,get_headers使用GET请求来获取标头。您还可以使用stream_context_set_default()

修改该请求
$headers = get_headers('http://example.com');

更多信息:PHP: get_headers