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



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



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

561   9  

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

Убедитесь, что параметр --post-data Правильно закодирован в процентах (особенно амперсанды!) или запрос, вероятно, не будет выполнен. Кроме того, убедитесь, что user и password являются правильными ключами; вы можете узнать правильные ключи, проследив HTML страницы входа в систему (загляните в функцию "inspect element" Вашего браузера и найдите атрибут name в полях имени пользователя и пароля).

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

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

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

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

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

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

wget http://username:[email protected]/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 - на -O /some/file/name

Я использовал одно решение, которое использовало lynx и wget. Если вы хотите использовать wget для загрузки какого-либо файла с сайта, который требует входа в систему, вам просто нужен файл cookie. Для того чтобы сгенерировать файл cookie, я выбираю lynx. lynx-это текстовый веб-браузер. Сначала вам нужно настроить файл для lynx, чтобы сохранить куки. Создайте файл 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.

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

Введите описание изображения здесь

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

Введите описание изображения здесь

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

Введите описание изображения здесь

Comments

    Ничего не найдено.