cURL: Come faccio a sapere se i miei cookie sono impostati correttamente?
Domanda
$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);
Il sito Web imposta un cookie e quindi reindirizza. Questo codice sarebbe sufficiente? Perché sembra non ricevere correttamente il cookie. Come posso verificare se è impostato? Meglio ancora, se so quali cookie voglio posso semplicemente crearli o qualcosa del genere?
Modifica: Quindi il mio script CURL visita il sito Web giusto? Il sito Web imposta i cookie per la convalida e voglio vedere se il mio script cURL sta ricevendo correttamente quei cookie. Voglio sapere se esiste un test per questo e / o voglio sapere se posso semplicemente creare un cookie per convalidare il sito Web.
Soluzione
Di recente ho avuto un progetto in cui dovevo passare i cookie tra i server e ho scoperto che l'impostazione di CURLOPT_COOKIEFILE
e CURLOPT_COOKIEJAR
ha funzionato allo stesso file.
Se vuoi solo vedere se i cookie del sito remoto sono impostati, dovresti essere in grado di guardare il file CURLOPT_COOKIEJAR
in un editor di testo.
Altri suggerimenti
Se questo fosse l'arricciamento della riga di comando, inseriresti il ??parametro -v
. Presta attenzione alle righe che iniziano con > Cookie:.
La versione php di questo è:
curl_setopt($ch,CURLOPT_VERBOSE,TRUE);//and set CURLOPT_STDERR to STDOUT
E se questo fosse un browser, farei il debug con uno di questi: puoi usare Fiddler su IE, TamperData o Firebug (net) su Firefox, l'ispettore su Chrome e su Safari o un proxy con qualsiasi browser per vedere come viene inviato il modulo da un "normale" browser.
L'approccio proxy potrebbe funzionare se si imposta l'arricciatura di php per usarlo.
curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,TRUE);//& CURLOPT_PROXYPORT CURLOPT_PROXY
Se si desidera aggiungere solo cookie a una richiesta, è possibile scrivere una riga come:
$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';
ma non ne sono sicuro, potrebbero essere più sulla stessa linea:
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..");