2010-01-07 35 views
0
<? 
$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); 
$data = curl_exec($ch); 
curl_close($ch); 
print "<textarea rows='10' cols='80'>"; 
print htmlentities($data); 
print "</textarea>"; 
exit(); 
?> 

這不會在textarea中產生結果,但應該有。其他飼料工作正常。CuRL不抓取這個XML網址的內容?

+1

你甚至沒有檢查錯誤的返回代碼。那將是一個開始的好地方;) – 2010-01-07 20:37:30

回答

0

這裏是我如何調試網頁抓取問題與捲曲的演練:

  1. 嘗試在瀏覽器的URL(與 的LiveHTTPHeaders),並與 CURLOPT_VERBOSE捲曲啓用。這有兩個目的:顯示正在播放的HTTP頭文件,它可以作爲URL本身的簡單測試。
  2. 如果它在瀏覽器中工作,但不在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服務器拒絕服務沒有用戶代理的任何請求。加一個,你很好走。

3

你有一個錯字。嘗試

print htmlentities($data); 

,而不是

print htmlentities($date); 

而且,這將是最好轉向使用error_reporting,如果你嘗試使用不存在的變量,通知您這樣的水平。你可以通過使用:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

E_NOTICE錯誤報告級別會給你使用未初始化變量的警告。

+0

Tatu,你的意思是一個typ_o_。 :) – 2010-01-07 20:19:11

+0

是的,不能相信我typoed'錯字':) – 2010-01-07 20:19:48

+0

固定但仍然沒有檢索任何東西 – justin 2010-01-07 20:34:32