cURL получает меньше файлов cookie, чем FireFox!Как это исправить? - PullRequest
0 голосов
/ 04 марта 2011

Как я могу сделать cURL, чтобы получить все файлы cookie?

Я подумал, что возможно Firefox получает разные файлы cookie при загрузке страницы, или у него есть какой-то встроенный javascript, который устанавливает некоторые файлы cookie после загрузки страницы, или, может быть,он перенаправляет на другие страницы, и другие страницы устанавливают другие файлы cookie, но я не знаю, как заставить curl делать то же самое.Я установил curl, чтобы следовать перенаправлениям, но все еще безуспешно.Curl устанавливает некоторые куки, но не все.

Ниже приведен код, который я использую в php:

$url = 'https://www.example.com';
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_COOKIESESSION, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($handle, CURLOPT_COOKIEJAR, "cookies.txt");
curl_setopt($handle, CURLOPT_COOKIEFILE, "cookies.txt");
curl_setopt($handle, CURLOPT_AUTOREFERER, true);
curl_setopt($handle, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)');
$htmlContent = curl_exec($handle);

Ниже приведен заголовок Live HTTP в Firefox

https://www.example.com

GET /index.ext HTTP / 1.1

Хост: www.example.com Пользовательский агент: Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10.6;ru-ru; rv: 1.9.2.10) Gecko / 20100914 Firefox / 3.6.10

Принять: текст / html, приложение / xhtml + xml, приложение / 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: 115

Соединение: keep-alive

Cookie: JSESSIONID = 3E85C5D0436D160D0623C085F68DC50E.catalog2;__utma = 137925942.1883663033.1299196810.1299196810.1299198374.2;__utmz = 137925942.1299196810.1.1.utmcsr = (прямой) | utmccn = (прямой) | utmcmd = (нет);citrix_ns_id = 0pQdumY48kxToPcBPS / QQC + w2vAA1;__utmc = 137925942

HTTP / 1.1 200 OK

Дата: пт, 04 марта 2011 01:20:30 GMT

Сервер: Apache / 2.2.15

Keep-Alive: тайм-аут = 5, макс = 100

Соединение: Keep-Alive

Transfer-Encoding: chunked

Тип содержимого: текст / html; кодировка= UTF-8

Я получаю JSESSIONID только с curl

Пожалуйста, помогите!

Ответы [ 4 ]

0 голосов
/ 05 марта 2011

Я понял это. Это был фактически JavaScript, который устанавливал куки после загрузки страницы :) Спасибо всем

0 голосов
/ 04 марта 2011

Используйте сетевой анализатор или прокси для сравнения запросов и ответов, у вас наверняка есть различия. Опубликуйте запросы и ответы здесь, если вы все еще не можете найти.

Если подделка пользовательского агента на стороне curl не работает, попробуйте сделать обратное, установив расширение firefox, которое подделывает пользовательский агент, и установите его на то, которое используется curl. Если это работает, это может быть некоторая пассивная идентификация в браузере (например, p0f от lcamtuf), зависящая от синхронизации по сети, и вам может быть трудно обойти ее. Было бы крайне удивительно, хотя!

0 голосов
/ 04 марта 2011

возможно, страница, которую вы загружаете, имеет какой-то другой контент, который фактически устанавливает куки, и, поскольку вы просматриваете только одну страницу, вы их не получаете, или некоторые куки установлены через javascript.

0 голосов
/ 04 марта 2011

Попробуйте использовать пользовательский агент Firefox на CURL и посмотрите, получите ли вы такое же количество файлов cookie.Вы должны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...