Как скачать страницы, которые перенаправляют после входа в систему? - PullRequest
5 голосов
/ 31 декабря 2011

Обычно страницы, которые имеют форму входа, можно загрузить с помощью

wget --no-check-certificate --save-cookies cookies --keep-session-cookies \
     --post-data="username=example&password=example" \
     "https://example.com/index.php?title=Special:Userlogin&returntotitle="

wget --no-check-certificate --load-cookies=cookies \
     --no-parent -r --level=2 -nc -E \
     https://example.com/Special:Sitemap

Но на сайтах DekiWiki это не работает, если требуется вход в систему.

Проблема швов будет описана в man wget

Примечание: если Wget перенаправлен после завершения запроса POST, он не будет отправлять POST данные на перенаправленный URL. Это потому, что URL-адреса, которые обрабатывают POST часто отвечают с перенаправлением на обычную страницу, которая не желает или не принимает POST. Это не совершенно ясно, что это поведение является оптимальным; если это не сработает, это может быть изменилось в будущем.

Вопрос

Можно ли это сделать с помощью Perl, например возможно HTML::TreeBuilder 3 или HTML::TokeParser или Mechanize или любым другим модулем Perl?

1 Ответ

4 голосов
/ 31 декабря 2011

Некоторые сайты, требующие входа в систему, не отправляют cookie-файлы с ответом.

Вместо этого они отправляют ответ о перенаправлении (302 Object Moved), за которым большинство браузеров следуют автоматически, а затем файл cookie отправляется в ответе для этой страницы перенаправления.

Я использую curl для этого, включив curl_opt FOLLOW_LOCATION, для инструмента командной строки используется опция -location. Это бесплатный инструмент, как wget.

curl --cookie cookie.txt --cookie-jar cookie.txt \
     --data-urlencode "username=example&password=example" \
     --insecure --location https://example.com/index.php?title=Special:Userlogin&returntotitle= -o downloadedfile.html https://example.com/Special:Sitemap

http://curl.haxx.se/download.html

Кроме того, иногда форма входа в систему ожидает публикации из нескольких частей / данных формы вместо просто сообщения application / x-www-form-urlencoded. Чтобы сделать curl, сделайте несколько изменений / данных формы, изменив его на --data-urlencode на -F.

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