İşte cURL ile sayfa kazıma sorunları hata ayıklama nasıl bir örneklerde bulunuyor:
- Try the URL in a browser (with
LiveHTTPHeaders), and in cURL with
CURLOPT_VERBOSE enabled. This serves two purposes: revealing the HTTP headers in play, and it serves as a simple test of the URL itself.
- Bu tarayıcıda çalışır, ancak cURL de, HTTP başlıklarını kadar cURL ile çalışıyorsanız cURL tarayıcıyı maç yayar.
Senin örnek ile deneyelim.
URL ancak, bir tarayıcıda çalışmalarını sağladı ...
CURLOPT_VERBOSE açma şöyle bildirmektedir:
* 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
Sunucu yanıtlarken değil. Tarayıcı istek ve cURL isteği arasındaki tek fark, tarayıcı daha başlıklarını gönderir. Yani, yapılacak bir şey çalışmaya başlar kadar tarayıcı başlıklarını ekleyerek deneydir. Eğer tarayıcınızın gönderdiği tüm başlıkları kopyalarsanız, istek aynı olmalıdır, ve sonuç olarak, fonksiyonel.
İşte, ben sadece kopyaladım ve PHP içine benim Firefox istek başlıklarını yapıştırılan ettik:
$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);
Ve çalışır. Biraz daha deneme User-Agent dışındaki tüm başlıkları silinebilir ortaya koymaktadır:
$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);
Ve orada mısın: görünüşe göre, bu IIS sunucu User-Agent olmadan herhangi isteklere hizmet reddediyor. Birini ekleyin ve gitmek için iyi bir konum.