這裏是我如何調試網頁抓取問題與捲曲的演練:
- 嘗試在瀏覽器的URL(與 的LiveHTTPHeaders),並與 CURLOPT_VERBOSE捲曲啓用。這有兩個目的:顯示正在播放的HTTP頭文件,它可以作爲URL本身的簡單測試。
- 如果它在瀏覽器中工作,但不在cURL中,請使用cURL直到HTTP標頭cURL發出的內容與瀏覽器匹配。
讓我們用你的例子試試這個。
的URL在瀏覽器中提供的作品,然而...打開CURLOPT_VERBOSE
揭示了以下內容:
* About to connect() to www.betjamaica.com port 80
* Trying 72.52.5.34... * connected
* Connected to www.betjamaica.com (72.52.5.34) port 80
> GET /livelines2008/lines.asmx/Load_Latest_Lines?SportType=Football&SportSubType=NFL&GameType=GAME HTTP/1.1
Host: www.betjamaica.com
Accept: */*
* Empty reply from server
* Connection #0 to host www.betjamaica.com left intact
* Closing connection #0
服務器的不答覆。瀏覽器請求和cURL請求之間的唯一區別是瀏覽器發送更多頭文件。所以,要做的就是嘗試添加瀏覽器標題直到它開始工作。如果您複製瀏覽器發送的所有標題,則請求應該完全相同,並且因此功能正常。
這裏,我簡單地複製和粘貼我的Firefox請求頭到PHP:
$request_url =
'http://www.betjamaica.com/livelines2008/lines.asmx/Load_Latest_Lines?SportType=Football&SportSubType=NFL&GameType=GAME';
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $request_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$headers = array(
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.16) Gecko/2009120208 Firefox/3.0.16',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-us,en;q=0.5',
'Accept-Encoding: gzip,deflate',
'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Keep-Alive: 300',
'Connection: keep-alive',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = curl_exec($ch);
curl_close($ch);
var_dump($data);
和它的作品。多一點的實驗表明,比用戶代理其他所有頭可以被刪除:
$headers = array(
'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.16)',
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
而你的是:顯然,這個IIS服務器拒絕服務沒有用戶代理的任何請求。加一個,你很好走。
你甚至沒有檢查錯誤的返回代碼。那將是一個開始的好地方;) – 2010-01-07 20:37:30