5

我正在使用脚本通过 WGET 在需要身份验证的 URL 上提取一些 XML 数据。

这样做时,我的脚本会为每个访问的 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
4

2 回答 2

5

这似乎是设计使然。按照@Wayne Conrad 的建议,我添加了 -d 开关,并且能够观察到第一次尝试失败,因为需要 NTLM,第二次尝试失败,因为第一次 NTLM 尝试只有 1 级,其中 3 级 NTLM 挑战-需要回应。WGET 最终在第三次尝试时提供所需的身份验证。

WGET 确实获得了一个 cookie,以防止在会话期间重新进行身份验证,如果文件之间的连接没有终止,这将防止这种情况发生。我需要向 WGET 传递一个文件列表才能发生这种情况,但是我无法这样做,因为我事先不知道文件名。

于 2010-01-12T14:00:15.360 回答
3

你似乎有一个新版本的 wget。在 1.10.2 之后,wget 不会发送身份验证,除非首先受到服务器的质询。这就是第一个失败的原因。第二个是你所描述的失败原因。

您可以通过添加参数 --auth-no-challenge 来减少其中之一。这会以“基本”模式发送第一个失败,而第二个将以“摘要”模式发送。哪个应该工作。

于 2014-01-14T17:04:36.893 回答