Wget с аутентификацией

Как загрузить веб-страницу, требующую имя пользователя и пароль?

Например, я хочу загрузить эту страницу после ввода имени пользователя и пароля:

http://forum.ubuntu-it.org/index.php

Ответ 1

Попробуйте представленное здесь решение:

Примечание для других, которые могут наткнуться на это:

  • Вышеописанное позволяет пользователю вводить ручной вход на сайт, который имеет форму с двумя полями ввода: один с именем user и один с именем password
  • У формы есть атрибут action, установленный на http://server.com/auth.php
  • Форма не использует JavaScript
    • Хороший намек на то, что он использует JavaScript, - это атрибут onsubmit в элементе формы
    • Обратите внимание, что это далеко не единственный способ установить атрибуты - используя JavaScript в любом месте страницы, или любой из статически или динамически загружаемых файлов script может изменять элементы формы
  • Лучший способ увидеть это - загрузить страницу и провести проверку в реальном времени, например. Firebug для Firefox

Итак, если имена атрибутов и URL-адрес формы различны, вам необходимо соответствующим образом изменить параметры на первую команду wget.

Если он использует JavaScript, есть вероятность, что он не будет работать вообще - например. в случае примера веб-сайта OPs он использует хеширование JavaScript клиента, поэтому внешний вызов с использованием wget не устанавливает необходимые поля в форме (в случае сайта Ubuntu, hash_passwrd).

Ответ 2

Использование параметров:

--password=PASS
--user=USERNAME

т.е.: wget http://www.example.com --user=joe --password=schmoe

Вы также можете добавить параметр --auth-no-challenge в случае возникновения дополнительных проблем:

т.е.: wget http://www.example.com --user=joe --password=schmoe --auth-no-challenge

Ответ 3

Следующие команды wget должны позволить вам получать доступ к страницам на веб-сайте, для которого требуется имя пользователя и пароль:

wget http://username:[email protected]/url/
wget --http-user=user --http-password=password http://example.org/url/

Ответ 4

Возможно, это поможет. На сайте, на котором я пытался войти, были некоторые скрытые поля, которые мне нужно было получить, прежде чем я смог успешно войти в систему. Таким образом, первый wget получает страницу входа в систему, чтобы найти дополнительные поля, вторую учетную запись wget на сайте и сохраняет файлы cookie, а третий использует эти файлы cookie для получения страницы, которую вы после.

#!/bin/sh

# get the login page to get the hidden field data
wget -a log.txt -O loginpage.html http://foobar/default.aspx
hiddendata=`grep value < loginpage.html | grep foobarhidden | tr '=' ' ' | awk '{print $9}' | sed s/\"//g`
rm loginpage.html

# login into the page and save the cookies
postData=user=fakeuser'&'pw=password'&'foobarhidden=${hiddendata}
wget -a log.txt -O /dev/null --post-data ${postData} --keep-session-cookies --save-cookies cookies.txt http://foobar/default.aspx

# get the page your after
wget -a log.txt -O results.html --load-cookies cookies.txt http://foobar/lister.aspx?id=42
rm cookies.txt

Там есть полезная информация об этом другом сообщении: superuser → с помощью wget для загрузки pdf файлов с сайта, для которого необходимо установить файлы cookie

Ответ 5

используйте параметры --user=X --password=Y, чтобы указать имя пользователя X и пароль Y.