cURL: Como posso saber se meus cookies estão sendo definidas corretamente?
Pergunta
$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);
O site define um cookie e, em seguida, redireciona. Será que isto seja suficiente código? Porque parece não estar recebendo o cookie corretamente. Como posso verificar para ver se ele é definido? Melhor ainda, se eu sei o que eu quero biscoitos posso apenas torná-lo ou algo assim?
Edit: Então minha onda visitas de script o site certo? O site conjuntos de cookies para validação, e eu quero ver se o meu script cURL está recebendo esses cookies corretamente. Eu quero saber se há um teste para isso, e / ou que eu quero saber se eu posso apenas criar um cookie para validar para o site.
Solução
Eu tive recentemente um projeto onde eu precisava para passar os cookies entre servidores, e eu achei que a fixação de ambos CURLOPT_COOKIEFILE
e CURLOPT_COOKIEJAR
para o mesmo arquivo fez o truque.
Se você está apenas querendo ver se os cookies do site remoto estão sendo definidas, você deve ser capaz de olhar para o arquivo CURLOPT_COOKIEJAR
em um editor de texto.
Outras dicas
Se esta fosse a onda linha de comando que você jogaria no parâmetro -v
. Preste atenção às linhas começando com > Cookie:
.
A versão php disso é:
curl_setopt($ch,CURLOPT_VERBOSE,TRUE);//and set CURLOPT_STDERR to STDOUT
E se isso fosse um navegador eu depurar com um destes: você pode usar Fiddler no IE, TamperData ou Firebug (líquido) no Firefox, o inspetor no Chrome e on Safari , ou um procurador com qualquer navegador para ver como o formulário é enviado por um navegador "normal".
O trabalho abordagem pode proxy se enrolar você conjunto de php para usá-lo.
curl_setopt($ch,CURLOPT_HTTPPROXYTUNNEL,TRUE);//& CURLOPT_PROXYPORT CURLOPT_PROXY
Se você quiser apenas adicionar cookies para um pedido, você pode escrever uma linha como:
$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';
mas eu não estou certo sobre isso, estes podem ser mais ao longo da mesma linha:
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..");