CURL: Comment savoir si mes cookies sont configurés correctement?
Question
$ckfile = tempnam ("/tmp", "CURLCOOKIE");
$useragent="Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";
$ch = curl_init ("website.com");
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec ($ch);
Le site Web définit un cookie, puis des redirections. Ce code suffirait-il? Parce qu'il semble ne pas bien recevoir le cookie. Comment puis-je vérifier si c'est réglé? Mieux encore, si je sais quels sont les cookies que je veux, puis-je le créer ou quelque chose d’autre?
Edit: Mon script CURL visite donc le site Web, n'est-ce pas? Le site Web configure les cookies pour la validation et je veux voir si mon script cURL les reçoit correctement. Je veux savoir s’il existe un test pour cela et / ou si je peux simplement créer un cookie à valider pour le site Web.
La solution
J'ai récemment eu un projet dans lequel je devais transmettre des cookies entre serveurs. J'ai constaté que définir le code CURLOPT_COOKIEFILE
et CURLOPT_COOKIEJAR
sur le même fichier était efficace.
Si vous souhaitez simplement savoir si les cookies du site distant sont en cours d'installation, vous devriez pouvoir consulter le fichier CURLOPT_COOKIEJAR
dans un éditeur de texte.
Autres conseils
S'il s'agissait de la ligne de commande curl, vous ajouteriez le paramètre -v
. Faites attention aux lignes commençant par > Cookie:
.
La version php de ceci est:
curl_setopt($ch,CURLOPT_VERBOSE,TRUE);//and set CURLOPT_STDERR to STDOUT
Et s’il s’agissait d’un navigateur, je déboguerais avec l’un de ceux-ci: vous pouvez utiliser Fiddler . sur IE, TamperData ou Firebug (net) sur Firefox, l'inspecteur sur Chrome et sur Safari , ou un proxy avec n'importe quel navigateur pour voir comment le formulaire est soumis par un message "normal". navigateur.
L'approche proxy pourrait fonctionner si vous définissez php's curl pour l'utiliser.
curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,TRUE);//& CURLOPT_PROXYPORT CURLOPT_PROXY
Si vous souhaitez simplement ajouter des cookies à une demande, vous pouvez écrire une ligne du type:
$ch->headers[] = 'Cookie: recent=543..; _session_id=6185..; __utma=572.1.1.1.1; __utmc=572..; __utmz=572.1.1.1.1.utmccn=(referral)|utmcsr=domain.com|utmcct=/request/path|utmcmd=referral';
mais je ne suis pas sûr de celui-là, ils pourraient être plus dans la même ligne:
curl_setopt($ch,CURLOPT_COOKIE,"recent=543..; _session_id=618..");
// Possibly, but I think this might overwrite other headers.
curl_setopt($ch,CURLOPT_HTTPHEADER, "Cookie: recent=543..; _session_id=6185..");