为什么weebly.com会自定义curl HEAD请求?

时间:2014-10-30 23:29:08

标签: php curl http-headers request libcurl

当我这样做时

$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的其他网站,但对于一些人来说,它最终会挂起。

1 个答案:

答案 0 :(得分:0)

因为libcurl会像使用GET一样运行,但是你只在实际的HEAD请求中改变方法,并且由于HEAD响应可能有一个Content-Length:头但没有响应体,因此搞砸了。

"适当"让libcurl执行HEAD并期望HEAD响应的方法是使用CURLOPT_NOBODY代替。

CURLOPT_CUSTOMREQUEST只应用于更改方法关键字,而不是用于更改行为。