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

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

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

 Ciro Santilli 新疆改造中心996ICU六四事件07 мая 2015 г., 11:04

Ответы на вопрос(9)

Если они'повторная проверка подлинности:

wget http://username:[email protected]/page.html

Если они'используя данные формы POSTed, вынужно будет использовать что-то вродезавивать вместо.

 ceejayoz24 авг. 2009 г., 22:15
Так? Ничто из этого не требует от вас что-либо менять на сервере.
 Señor Reginold Francis24 авг. 2009 г., 22:13
У меня нет доступа, чтобы изменить что-либо на сервере, это только для чтения

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

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

 menteith27 мар. 2018 г., 20:59
Отличное решение!
 Jan08 апр. 2019 г., 08:35
Потрясающие! Также указал мне на возможность использования curl вместо wget, так как он может делать то же самое, и я неТ даже нужно изменить параметры.
Решение Вопроса

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

# 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 атрибут в полях имени пользователя и пароля).

 Mowgli02 апр. 2013 г., 17:45
Я нене знаю, почему это не такВот мой вопрос о SOF.goo.gl/ySzst
 Mowgli28 мар. 2013 г., 02:23
Я получаю ошибкуWGET64: missing URL Я поместил всю команду wget в одну строку и удалил `\`
 jarnoan03 нояб. 2016 г., 07:38
Я обновил ответ в соответствии с комментариями и редактировать предложения: Добавлено--keep-session-cookies а также--delete-after для первой команды и удалены-p со второго. Я не'попробовать новую версию, поэтому мыпосмотрим как пойдет ...
 starfry01 нояб. 2016 г., 16:10
Я также должен был пройтиReferer заголовок в запросе аутентификации:--header 'Referer: https://wordpress.example.com/wp-login.php?loggedout=true', Я также должен был проверить имена параметров, которые для меня былиlog а также .pass
 gaoithe24 нояб. 2014 г., 13:28
добавление --keep-session-cookies к первой команде сработало для меня
 wadim11 мая 2014 г., 19:09
--keep-session-cookies требуется только для первой команды. Он сообщает первой команде, что нужно включить сеансовые куки при сохранении куки в файл. Вторая команда просто читает все куки из предоставленного файла.
 Znik21 авг. 2015 г., 16:07
это работает в слиянии должным образом, но следует заменить имя поля на os_password и os_username.
 Junaid Qadir20 июл. 2014 г., 08:38
Дает мнеScheme missing. ошибка
 Felipe Alvarez09 нояб. 2011 г., 03:56
добавить --keep-session-cookies к первой команде или ко второй?
 ændrük06 янв. 2012 г., 18:24
Ты нет нужно (-p--page-requisites) за это.
 Jim Hunziker02 янв. 2013 г., 16:41
Это'Также стоит добавить--delete-after на первый поиск, так что вы неВ итоге вы не можете сохранить страницу результатов от входа в систему.

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

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

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

 Znik21 авг. 2015 г., 15:49
к сожалению, не применяется в автоматизированных сценариях
 Will Sheppard06 февр. 2019 г., 15:11
Вопрос нене указывать автоматизированный сценарий. Это решение позволяет автоматизировать 99% работ.
Решение, которое использует lynx и wget.

Замечания:Рысь должна быть скомпилирована с--enable-стойкие-куки флаг, чтобы это работало

Если вы хотите использовать 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
 Tiberiu13 дек. 2018 г., 18:41
Что делать, если для входа требуется JavaScript? Lynx не поддерживает Javascript.

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

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

 Phil C25 мая 2018 г., 15:28
Вы можете установить несколько файлов cookie одновременно, --header "Cookie: access_token = IKVYJ; XSRF-TOKEN = 5e10521d "
 Tuxdude27 июл. 2016 г., 20:29
Потрясающий совет. Это полезно, когда вы можете получить доступ к куки-файлу со своего собственного компьютера, а затем использовать его с другого безголового компьютера из командной строки. :)

Я хотел однострочник, который нескачать любые файлы; Вот пример передачи вывода 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

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

В примере используется Google Chrome.

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

Тогда откройDevTools на странице, где вы, где войдите, перейдите наПриставка и получите ваши куки, введяdocument.cookie

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

Ваш ответ на вопрос