因此,我尝试使用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请求?
答案 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