2010-01-07 5 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(); 
?> 

Ceci n'a aucun résultat dans le plan de texte mais il devrait être. D'autres flux fonctionnent bien.CuRL ne saisissant pas le contenu de cette URL XML?

+1

Vous ne vérifiez même pas le code de retour pour les erreurs. ce serait un bon endroit pour commencer;) –

Répondre

0

Voici une procédure pas à pas de la façon dont je déboguer les problèmes de grattage page avec cURL:

  1. Essayez l'URL dans un navigateur (avec LiveHTTPHeaders), et cURL avec CURLOPT_VERBOSE activé. Cela sert à deux fins: révéler les en-têtes HTTP en jeu et servir de simple test de l'URL elle-même.
  2. Si cela fonctionne dans le navigateur, mais pas dans cURL, travaillez avec cURL jusqu'à ce que les en-têtes HTTP cURL correspondent au navigateur.

Essayons ceci avec votre exemple.

L'URL que vous a fourni des œuvres dans un navigateur, mais ...

Activation CURLOPT_VERBOSE révèle ce qui suit:

* 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 

Le serveur est ne pas répondre. La seule différence entre la requête du navigateur et la requête cURL est que le navigateur envoie plus d'en-têtes. Donc, la chose à faire est d'expérimenter avec l'ajout d'en-têtes de navigateur jusqu'à ce qu'il commence à fonctionner. Si vous copiez tous les en-têtes envoyés par votre navigateur, la requête doit être identique et, par conséquent, fonctionnelle.

Ici, j'ai simplement copié et collé mes têtes de requête Firefox dans le 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); 

Et ça marche. Un peu plus d'expérimentation révèle que tous les en-têtes autres que User-Agent peuvent être retirés:

$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); 

Et vous êtes: apparemment, ce serveur IIS refuse de servir toutes les demandes sans User-Agent. Ajoutez-en un, et vous êtes prêt à partir.

3

Vous avez une erreur ici. Essayez

print htmlentities($data); 

au lieu de

print htmlentities($date); 

En outre, il serait souhaitable de tourner error_reporting à un niveau tel que vous informe si vous essayez d'utiliser des variables qui n'existent pas. Vous pouvez le faire en utilisant:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

niveau de rapport d'erreur E_NOTICE vous donner un avertissement pour l'utilisation de variables non initialisées.

+0

Tatu, vous voulez dire un typ_o_. :) –

+0

Yup, je ne peux pas croire que j'ai fait une faute de frappe 'typo' :) –

+0

fixe mais ne récupérant toujours rien – justin

Questions connexes