Как пройти страницу входа с помощью Wget? - PullRequest
238 голосов
/ 24 августа 2009

Я пытаюсь использовать Wget для загрузки страницы, но не могу пройти через экран входа в систему.

Как отправить имя пользователя / пароль, используя данные публикации на странице входа в систему, а затем загрузить фактическую страницу как аутентифицированный пользователь?

Ответы [ 9 ]

314 голосов
/ 16 сентября 2009

На основании страницы руководства:

# Log in to the server.  This only needs to be done once.
wget --save-cookies cookies.txt \
     --keep-session-cookies \
     --post-data 'user=foo&password=bar' \
     --delete-after \
     http://server.com/auth.php

# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

Убедитесь, что параметр --post-data имеет правильную процентную кодировку (особенно амперсанды!), Иначе запрос, возможно, не удастся Также убедитесь, что user и password являются правильными ключами; Вы можете узнать правильные ключи, отключив HTML-код страницы входа в систему (откройте в браузере функцию «осмотреть элемент» и найдите атрибут name в полях имени пользователя и пароля).

50 голосов
/ 04 мая 2014

Я непосредственно передал куки существующего подключения к wget с --no-cookies и заголовком HTTP-запроса Cookie. В моем случае это был вход в университет Moodle, где вход выглядит более сложным (с использованием нескольких запросов с билетом входа) Я добавил --post-data, потому что это был запрос POST. Например, получить список всех пользователей Moodle:

wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php

37 голосов
/ 13 июня 2016

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

screenshot Используйте «Копировать как cURL» на вкладке «Сеть» Инструментов разработчика (перезагрузите страницу после открытия) и замените флаг заголовка curl -H и --data на --header и --post-data.

в wget
25 голосов
/ 09 марта 2014

У меня была такая же проблема. Мое решение состояло в том, чтобы войти в систему через Chrome и сохранить данные куки в текстовый файл. Это легко сделать с помощью этого расширения Chrome: Расширение экспорта Chrome cookie.txt .

Когда вы получаете данные куки, есть также пример того, как их использовать с wget. Вам предоставляется простая командная строка copy-paste.

10 голосов
/ 11 октября 2016

Я хотел однострочник, который не загружал никаких файлов; Вот пример передачи вывода cookie в следующий запрос. Я только протестировал следующее на Gentoo, но оно должно работать в большинстве * nix сред:

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' (это одна строка, хотя она, вероятно, переносится в ваш браузер)

Если вы хотите сохранить вывод в файл, измените -O - на -O /some/file/name

9 голосов
/ 15 декабря 2010

Вам не нужен cURL для создания данных формы POST. --post-data 'key1=value1&key2=value2' работает просто отлично. Примечание: вы также можете передать имя файла в wget с данными POST в файле.

8 голосов
/ 25 августа 2009

Если они используют базовую аутентификацию:

wget http://username:password@www.domain.com/page.html

Если они используют данные формы POST, вам нужно использовать что-то вроде cURL .

4 голосов
/ 19 октября 2017

Решение, использующее lynx и wget.

Примечание: Lynx должен быть скомпилирован с флагом - enable-persistent-cookies , чтобы это работало

Если вы хотите использовать wget для загрузки какого-либо файла с сайта, который требует входа в систему, вам просто нужен файл cookie.Чтобы сгенерировать файл cookie, я выбрал lynx.Lynx - это текстовый веб-браузер.Сначала вам нужен файл конфигурации для lynx, чтобы сохранить cookie.Создайте файл lynx.cfg.Запишите эти настройки в файл.

SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file

Затем запустите lynx с помощью этой команды:

lynx -cfg=lynx.cfg http://the.site.com/login

После ввода имени пользователя и пароля и выбора «сохранить меня на этом компьютере» иличто-то похожее.Если авторизоваться успешно, вы увидите красивую текстовую веб-страницу сайта.И вы выходите из системы.В текущем каталоге вы найдете файл cookie с именем cookie.file.Это то, что нам нужно для wget.

Тогда wget может загрузить файл с сайта с помощью этой команды.

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
1 голос
/ 13 апреля 2018

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

Например, используя Google Chrome.

Войдите в систему, где вам нужно, и нажмите «Загрузить». Перейдите, чтобы скачать и скопировать ссылку.

enter image description here

Затем откройте DevTools на странице, где вы войдете в систему, перейдите на Консоль и получите куки, введя document.cookie

enter image description here

Теперь перейдите на сервер и загрузите файл: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

enter image description here

...