封裝了一個curl抓取網頁的函數,在本地測沒問題;放到測試伺服器上後,如果通過瀏覽器訪問執行,大部分時候函數返回的HTTP狀態代碼返回0,錯誤資訊`Error:name lookup timed out`,極其偶像的情況下返回200成功;但如果直接在測試伺服器上直接用命令列執行,100%成功。代碼如下:
static public function curlGet($url, $data = array(), $header = array(), $timeout = 3, $port = 80) { $is_ssl = substr($url, 0, 5) == 'https' ? 1 : 0; $ch = curl_init(); if (!empty($data)) { $data = is_array($data)?http_build_query($data): $data; $url .= (strpos($url,'?')? '&': "?") . $data; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳轉後的頁面 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_POST, 0); //curl_setopt($ch, CURLOPT_PORT, $port); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_REFERER, $url); // curl_setopt($ch, CURLOPT_USERAGENT, self::url2useragent($url)); if($is_ssl){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過認證檢查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 從認證中檢查SSL密碼編譯演算法是否存在 } $result = array(); $result['result'] = curl_exec($ch); $result['http_code'] = curl_getinfo($ch,CURLINFO_HTTP_CODE); if (0 != curl_errno($ch)) { $result['error'] = "Error:\n" . curl_error($ch); } curl_close($ch); return $result; }
我個人感覺和代碼應該關係不大,不知是哪的問題。望各路大神不吝賜教,指點迷津,不勝感激。