2010-01-11 65 views
4

我正在使用脚本在WGET上使用需要验证的URL来下拉一些XML数据。WGET为什么在成功之前返回2条错误消息?

在这样做时,我的脚本生成的访问的每个网址下面的输出(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 
+1

可能有多种验证方法..方法一和两失败,第三次尝试成功? – lexu 2010-01-11 18:19:19

+0

@lexu - 一种可能性,但是如何确定我的服务器正在使用哪种方法,以及如何指定WGET先使用该方法? – Dinedal 2010-01-11 18:51:05

+0

如果您给wget -d开关,它会显示每个请求和响应的全文。 – 2010-01-12 04:32:24

回答

4

这似乎是由设计。根据@Wayne Conrad的建议,我添加了-d开关,并且能够观察到第一次尝试失败,因为需要NTLM,而第二次尝试失败,因为第一次NTLM尝试仅仅是第1级,其中第3级NTLM质询 - 回应是必需的。 WGET最终在第三次尝试时提供了所需的认证。

WGET确实会得到一个cookie,以防止在会话期间重新进行身份验证,如果连接在文件之间没有终止,则会阻止此操作。我需要通过WGET一个文件列表才能发生,但是我无法提供,因为我不提前知道文件名。

2

你似乎有一个新版本的wget。在1.10.2之后,wget不会发送认证,除非服务器首先提出质疑。这就是为什么第一个失败。第二个是你描述的失败原因。

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