我正在使用脚本通过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
答案 0 :(得分:5)
这似乎是设计上的。根据@Wayne Conrad的建议,我添加了-d开关,并且能够观察到第一次尝试失败,因为需要NTLM,并且第二次尝试失败,因为第一次NTLM尝试只是级别1,其中级别3 NTLM挑战 - 需要回应。 WGET最终在第三次尝试时提供所需的身份验证。
WGET确实获得了一个cookie,以防止在会话期间重新进行身份验证,如果连接未在文件之间终止,则会阻止此操作。我需要传递WGET文件列表才会发生这种情况,但我无法提前,因为我事先不知道文件名。
答案 1 :(得分:3)
你似乎有一个新版本的wget。在1.10.2之后,wget不会发送身份验证,除非服务器首先提出质询。这就是为什么第一个失败的原因。第二个是你所描述的失败原因。
您可以通过添加参数--auth-no-challenge来减少其中一个。这将发出第一个“基本”,它将失败,第二个将以“摘要”模式发送。哪个应该有用。