Как пройти через страницу входа с помощью Wget?
Я пытаюсь использовать Wget для загрузки страницы, но я не могу пройти мимо экрана входа.
Как я могу отправить имя пользователя / пароль, используя данные post на странице входа, а затем загрузить фактическую страницу в качестве аутентифицированного пользователя?
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>
Используйте "Копировать как cURL" на вкладке Network инструментов разработчика (перезагрузите страницу после открытия) и замените флаг заголовка curl 


Comments