cURL - сканирование источника сайта - PullRequest
1 голос
/ 19 июня 2010

Я пытался использовать программу cURL внутри BASH для загрузки исходного кода веб-страницы.У меня возникают трудности при попытке загрузить код страницы, когда страница использует более сложную кодировку, чем простой HTML.Например, я пытаюсь просмотреть исходный код следующей страницы с помощью следующей команды:

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones"

Однако результат этого не соответствует исходному коду, сгенерированному Firefox, когда я нажимаю «Просмотреть исходный код».Я считаю, что это потому, что на странице есть элементы Javascript, но я не могу быть уверен.

Например, я не могу сделать:

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" | grep "Access to 4G speeds"

Даже если эта фраза явно найденав источнике Firefox.Я попытался просмотреть справочные страницы, но не знаю достаточно о проблеме, чтобы найти возможное решение.

Предпочтительный ответ будет включать в себя то, почему это не работает так, как я ожидаю, и решение этой проблемы.проблема с использованием curl или другого исполняемого файла инструмента из Linux.

РЕДАКТИРОВАТЬ:

По предложению ниже я также включил переключатель useragent безуспешно:

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3" | grep -i "Sorry"

Ответы [ 2 ]

4 голосов
/ 19 июня 2010

Во-первых, я не вижу вещи "Доступ к скорости 4G", когда перехожу на эту страницу.

Двумя наиболее вероятными виновниками этого различия являются файлы cookie и ваш пользовательский агент.

Вы можете указать куки вручную, используя curl или wget. Извлеките свои куки из Firefox, используя любые плагины, которые вы хотите, или просто

javascript:prompt('',document.cookie);

в строке вашего местоположения Затем прочитайте справочные страницы для wget или curl и посмотрите, как включить этот cookie.


EDIT : Кажется, это то, что я думал, пропавшее печенье.

curl --cookie "INSERT THE COOKIE YOU GOT HERE" http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones | grep "Access to 4G"

Как указано выше, вы можете получить любой файл cookie, указанный выше: javascript:prompt('',document.cookie), а затем скопировать появившийся текст по умолчанию. Убедитесь, что вы находитесь на странице спринта, когда вставляете ее в адресную строку (в противном случае вы получите неправильный файл cookie веб-сайта)


РЕДАКТИРОВАТЬ 2

Причина, по которой ваш cookie-файл в браузере и файл cookie-оболочки различались, заключалась в различном взаимодействии.

Причиной, по которой я не увидел, о чем говорил Access-up-4G, было то, что я не ввел свой почтовый индекс.

Если вы хотите иметь постоянно релевантный файл cookie, вы можете заставить curl делать все, что требуется для получения этого файла cookie, в данном случае ввести почтовый индекс.

В curl вы можете сделать это с несколькими запросами и хранить полученные куки в банке с куки:

 [stackoverflow]  curl --help | grep cookie
 -b/--cookie <name=string/file> Cookie string or file to read cookies from (H)
 -c/--cookie-jar <file> Write cookies to this file after operation (H)
 -j/--junk-session-cookies Ignore session cookies read from file (H)

Так что просто укажите банку с печеньем, отправьте запрос на отправку почтового индекса, затем работайте.

0 голосов
/ 19 июня 2010

Если вы получаете другой исходный код из того же источника, которым является сервер, скорее всего, вынюхиваете ваш пользовательский агент и выкладываете конкретный код.

Javascript может работать с DOM и выполнять любые действия, но если вы используете «видеть исходный код», код будет точно таким же, как тот, который ваш браузер прочитал первым (до манипуляций с DOM).

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