2014-10-30 54 views
0

當我做爲什麼自定義curl HEAD請求爲weebly.com掛起?

$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

你是指「相同的HEAD請求」是什麼意思? [doc](http://php.net/get_headers)聲明_默認的'get_headers'使用GET請求來獲取頭文件._ – kero 2014-10-30 23:31:17

回答

0

由於libcurl會像使用GET那樣工作,但只是在實際的HEAD請求中改變了方法,並且由於HEAD響應可能具有Content-Length:頭但沒有響應體,

使libcurl執行HEAD並期待HEAD響應的「正確」方式是使用CURLOPT_NOBODY來代替。

CURLOPT_CUSTOMREQUEST只應該用來改變方法關鍵字,而不是改變行爲。