当我这样做时
$h = get_headers('http://www.weebly.com');
它工作得很好......该页面的标题会立即返回。
但是如果我尝试使用curl ...
通过显式HEAD请求检索标题 $url = 'http://www.weebly.com';
$request_headers = array(
'Connection: close',
);
$user_agent = 'curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15';
$ch = curl_init($url);
curl_setopt_array($ch, array(
CURLOPT_CUSTOMREQUEST => 'HEAD',
CURLOPT_HEADER => TRUE,
CURLOPT_HTTPHEADER => $request_headers,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_MAXREDIRS => 10,
CURLOPT_USERAGENT => $user_agent,
));
$result = curl_exec($ch);
请求未完成。
我的CURL设置有什么问题?这适用于http://www.google.com的其他网站,但对于一些人来说,它最终会挂起。
答案 0 :(得分:0)
因为libcurl会像使用GET一样运行,但是你只在实际的HEAD请求中改变方法,并且由于HEAD响应可能有一个Content-Length:头但没有响应体,因此搞砸了。
"适当"让libcurl执行HEAD并期望HEAD响应的方法是使用CURLOPT_NOBODY代替。
CURLOPT_CUSTOMREQUEST只应用于更改方法关键字,而不是用于更改行为。