Почему WGET возвращает 2 сообщения об ошибках, прежде чем это удастся? - PullRequest
5 голосов
/ 11 января 2010

Я использую сценарий для вывода некоторых данных XML на URL-адрес, необходимый для аутентификации, с помощью WGET.

При этом мой сценарий выдает следующие выходные данные для каждого URL-адреса, к которому был осуществлен доступ (IP-адреса и имена хостов изменены для защиты виновных):

> Resolving host.name.com... 127.0.0.1
> Connecting to host.name.com|127.0.0.1|:80... connected.
> HTTP request sent, awaiting response... 401 Access denied
> Connecting to host.name.com|127.0.0.1|:80... connected.
> HTTP request sent, awaiting response... 401 Unauthorized
> Reusing existing connection to host.name.com:80.
> HTTP request sent, awaiting response... 200 OK

Почему WGET жалуется на то, что доступ к URL-адресу дважды не удался до успешного подключения? Есть ли способ его заткнуть или правильно подключить с первой попытки?

Для справки, вот строка, которую я использую для вызова WGET:

wget --http-user=USERNAME --password=PASSWORD -O file.xml http://host.name.com/file.xml

Ответы [ 2 ]

5 голосов
/ 12 января 2010

Это похоже на дизайн. Следуя совету @Wayne Conrad, я добавил ключ -d и смог наблюдать, как первая попытка не удалась, потому что требовался NTLM, а вторая попытка не удалась, потому что первая попытка NTLM была только 1-го уровня, где NTLM-вызов уровня 3 Ответ был необходим. WGET наконец предоставляет необходимую аутентификацию с третьей попытки.

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

3 голосов
/ 14 января 2014

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

Вы можете уменьшить один из них, добавив параметр --auth-no-challenge. При этом первый отправляется в «базовом» режиме, который завершится ошибкой, а второй будет отправлен в режиме «дайджеста». Который должен работать.

...