2012-05-25 3 views
1

Je suis en train de récupérer une page Web à partir de l'adresse suivante:Différence entre cURL et navigateur Web?

http://www.medicare.gov/find-a-doctor/provider-results.aspx?searchtype=OHP&specgrpids=922&loc=43615&pref=No&gender=Unknown&dist=25&lat=41.65603&lng=-83.66676

Il fonctionne quand je le coller dans un navigateur, mais quand je le lance à travers cURL, je reçois une page avec l'erreur suivante : "Un ou plusieurs paramètres de chaîne de requête de l'URL demandée ne sont pas valides ou ont une valeur inattendue, veuillez corriger et réessayer."

Cela ne semble pas faire de différence si je fournis un autre userAgent ou un autre référent. Il y a une redirection, donc j'utilise CURLOPT_FOLLOWLOCATION.

Voici mon code:

$ch = curl_init($page); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0'); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

$html = curl_exec($ch); 
curl_close($ch); 
echo $html; 

Toute réflexion sur pourquoi une demande comme cela va fonctionner dans le navigateur et non avec cURL?

+0

Je reçois la même erreur, ce que vous obtenez avec cURL –

+0

Au lieu de suivre l'emplacement, piègez la redirection et voir où vous êtes envoyé. Est-ce la même chose entre les versions curl et navigateur? –

+0

Ce lien génère l'erreur "Un ou plusieurs paramètres de chaîne de requête de l'URL demandée ne sont pas valides ou ont une valeur inattendue, veuillez corriger et réessayer." sur mon navigateur, pourrait avoir besoin d'ajouter un cookie jar à curl –

Répondre

2

Le problème était avec les cookies. Ce site particulier nécessitait un ensemble de cookies ASP.NET_SessionId pour répondre. J'ajouté ce qui suit à ma demande cURL:

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIE, 'ASP.NET_SessionId=ho1pqwa0nb3ys3441alenm45; path=/; domain=www.medicare.gov'); 

Je ne sais pas si l'identifiant de session fonctionnera, mais il a également essayé quelques les aléatoires et ils ont tous travaillé.

2

Votre navigateur envoie des cookies que cURL ne contient pas. Vérifiez les cookies que vous envoyez sur le site en utilisant les outils du navigateur ou Fidler - vous aurez besoin de passer le même.

+0

Curl offre de nombreuses fonctionnalités telles que le support de proxy, authentification utilisateur, téléchargement FTP, HTTP post, connexions SSL, ** cookies **, CV de transfert de fichiers, Metalink, ainsi que diverses autres fonctionnalités. https://en.wikipedia.org/wiki/CURL#Examples_of_cURL_use_from_command_line – Premraj