Как пройти страницу входа с помощью Wget?


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

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

9 220

9 ответов:

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

# 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

убедитесь, что

Я непосредственно дал куки существующего соединения с 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

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

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

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

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

если они используют обычную проверку подлинности:

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

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

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

Я хотел один лайнер, который не загружал файлы; вот пример передачи вывода 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 - to -O /some/file/name

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

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.файл. Это то, что нам нужно для wget.

затем wget может скачать файл с сайта с помощью этой команды.

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz

пример скачать с 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