Это отвлекает внимание от вопроса, заданного вчера: Кажется, не удается получить содержимое веб-страницы через cURL – пользовательский агент и HTTP-заголовки оба установлены?
Я пытаюсь получить доступ к содержимому url, проблема в том, как этот URL обрабатывает запрос.
URL: http://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-30-2/
Первый запрос (без файлов cookie):
После «обучения» использовать завиток в командной строке (реквизит на @ d3v3us), простой запрос curl -i http://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-30-2/
показывает следующее:
curl -i http://www.deindeal.ch/deals/atlas-grand-hote l-2-naechte-30-2/ HTTP/1.1 302 FOUND Date: Fri, 30 Dec 2011 13:15:00 GMT Server: Apache/2.2.16 (Debian) Vary: Accept-Language,Cookie,Accept-Encoding Content-Language: de Set-Cookie: csrftoken=edc8c77fc74f5e788c53488afba4e50a; Domain=www.deindeal.ch; Max-Age=31449600; Path=/ Set-Cookie: generic_cookie=1; Path=/ Set-Cookie: sessionid=740a8a2cb9fb51166dcf865e35b91888; expires=Fri, 27-Jan-2012 13:15:00 GMT; Max-Age=2419200; Path=/ Location: http://www.deindeal.ch/welcome/?deal_slug=atlas-grand-hotel-2-naechte- 30-2 Content-Length: 0 Connection: close Content-Type: text/html; charset=utf-8
Второй запрос (с куки-файлами):
Итак, я сохраняю файл cookie с помощью -c
, проверяю, что он сохраняет cookie.txt
и снова запускает запрос с добавлением -b cookie.txt
, получая следующее:
curl -i -b cookie.txt http://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-3 0-2/ HTTP/1.1 302 FOUND Date: Fri, 30 Dec 2011 13:38:17 GMT Server: Apache/2.2.16 (Debian) Vary: Accept-Language,Cookie,Accept-Encoding Content-Language: de Set-Cookie: csrftoken=49f5c804d399f8581253630631692f5f; Domain=www.deindeal.ch; Max-Age=31449600; P ath=/ Location: http://www.deindeal.ch/welcome/?deal_slug=atlas-grand-hotel-2-naechte-30-2 Content-Length: 0 Connection: close Content-Type: text/html; charset=utf-8
Для меня это похоже на то же содержимое, минус один или два параметра в cookie, но, может быть, я что-то пропускаю?
Я пытаюсь заставить запрос curl функционировать и возвращать то же содержимое, что и при запросе этого URL-адреса через браузер, но я не уверен, что делать дальше.
Примечание. Я пометил этот PHP, поскольку я использую PHP для запросов, я просто использую командную строку, чтобы легко отображать возвращенные заголовки, поэтому, если есть другие библиотеки или методы PHP, которые будут работать (лучше или в место, которое cURL не будет), пожалуйста, не стесняйтесь предлагать какие-либо.
Любая помощь будет очень признательна;).
Ты нуждаешься в этом,
curl -iL -c cookie.txt -b cookie.txt http://www.deindeal.ch/deals/atlas-grand-hotel-2-naechte-3
-b
используется для чтения файлов cookie. Для файла, который будет использоваться для сохранения cookie после использования транзакции http, используйте флаг -c
. Его назвали кукурузой .
Использование WebGet (извините, написанное мной), потянув содержимое, довольно просто.
require "WebGet.php"; $w = new WebGet(); $w->cookieFile = 'cookie.txt'; // must be writable $w->requestContent("https://github.com/shiplu/dxtool"); print_r($w->responseHeaders) // prints response headers print_r($w->cachedContent) // prints url content
Возможно, я не понимаю ваш вопрос, но ответ 302 означает найденный контент, и вам просто нужно следовать правилу «Местоположение»? cUrl выполнит только один запрос, в отличие от вашего браузера, который увидит, что 302 (установите куки-файлы, как и вы, затем следуйте этому заголовку местоположения). Похоже, ваше местоположение имеет «?» в нем нет в оригинале. Запустите cUrl, с тем же банком cookie, на URL-адрес местоположения.
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection