WGET 401未经授权

19
我正在尝试使用批处理文件和WGET从此处下载公共FCC文件:

http://wireless.fcc.gov/uls/data/complete/l_micro.zip

当我最初使用参数运行批处理文件时:
wget --server-response -owget.log http://wireless.fcc.gov/uls/data/complete/l_micro.zip 

出现HTTP 401未授权错误。我可以在这个点上重试,但是它仍然失败。然而我注意到,如果我打开IE,开始下载并在提示保存时取消,我可以重新运行批处理文件,然后它会执行得很完美!

以下是我的详细服务器响应记录:

--2012-02-06 14:32:24--  http://wireless.fcc.gov/uls/data/complete/l_micro.zip
Resolving wireless.fcc.gov (wireless.fcc.gov)... 192.104.54.158
Connecting to wireless.fcc.gov (wireless.fcc.gov)|192.104.54.158|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 302 Found
  Location: REMOVED - appears to have my IP
  Cache-Control: no-cache
  Pragma: no-cache
  Content-Type: text/html; charset=utf-8
  Connection: close
  Content-Length: 513
Location: REMOVED [following]
--2012-02-06 14:32:24--  REMOVED
Resolving REMOVED... 192.168.2.11
Connecting to REMOVED|192.168.2.11|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 401 Unauthorized
  Cache-Control: no-cache
  Pragma: no-cache
  WWW-Authenticate: NTLM
  WWW-Authenticate: BASIC realm="AD_BCAAA"
  Content-Type: text/html; charset=utf-8
  Proxy-Connection: close
  Set-Cookie: BCSI-CS-8ECFB6B4AA642EF0=2; Path=/
  Connection: close
  Content-Length: 575
Authorization failed.

在我完成小型IE程序并成功运行后,以下是日志记录:

--2012-02-08 15:52:43--  http://wireless.fcc.gov/uls/data/complete/l_micro.zip
Resolving wireless.fcc.gov (wireless.fcc.gov)... 192.104.54.158
Connecting to wireless.fcc.gov (wireless.fcc.gov)|192.104.54.158|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Server: Sun-Java-System-Web-Server/7.0
  Date: Fri, 27 Jan 2012 18:37:51 GMT
  Content-type: application/zip
  Last-modified: Sun, 22 Jan 2012 11:18:09 GMT
  Etag: "46fa95c-4f1bf071"
  Accept-ranges: bytes
  Content-length: 74426716
  Connection: Keep-Alive
  Age: 1045014
Length: 74426716 (71M) [application/zip]
Saving to: `l_micro.zip'

非常感谢任何帮助!


你的命令对我来说完美无缺... - jglouie
我尝试使用 wget http://wireless.fcc.gov/uls/data/complete/l_micro.zip 命令,并获得了一个名为 l_micro.zip 的文件,大小为 74693506 字节,其 sha1sum 为 1f8393bf6231bfa9689ec91cab6a660244f35605 - Dan D.
你的网络上有透明代理吗?您能否在IE会话上运行Wireshark或Fiddler以查看它的不同之处? - Edward Thomson
7个回答

39

如果网站只是设置了htpassword,你可以尝试:

wget --user=admin --ask-password https://www.yourwebsite.com/file.zip

12
我使用了 --auth-no-challenge,确切的错误得到了解决。

完美...我调用的API没有发送授权挑战。这个选项强制wget始终发送Authorization头。 - mlathe

10

您的网络上有一台 Blue Coat 安全网关,这可以从响应中的行得到证明:

Set-Cookie: BCSI-CS-8ECFB6B4AA642EF0=2; Path=/

看起来它想让你进行身份验证,可能需要使用您的域凭据。尝试使用--http-user--http-passwd传递它们。


6

我曾经在基于xwiki的网站上遇到类似问题。经过多次尝试,我找到了一些组合可以很好地解决我的问题。

wget --no-check-certificate --auth-no-challenge -k -nc -p -l 1 -r https://user:password@host.domain

我觉得关键是-- auth-no-challenge。


2

可以尝试使用这个Firefox插件。它会生成一个wgetcurl命令,可以从bash中复制并运行。


2
太棒了!谢谢你,这帮了我大忙! - rbennell

1

我来这里是想找出为什么在另一个系统上没有出现问题时,wget会给出401未经授权的消息。

从源代码安装了更高版本的wget后(二进制文件在我的发行版中不可用),它就可以工作了。我无法解释原因,除非这必须是某种错误,因此如果以上方法都无法解决您的问题,请考虑升级wget。


0
尝试使用wget设置用户代理字符串,例如:
--user-agent=Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)  

如果某些用户代理看起来绕过了“通常”的信息路径(即通过网页),则完全可以拒绝站点的请求。

虽然这并不能解释你的问题,但这是个好主意。也许该站点实施了一种机制,当您使用“已知”的浏览器(例如IE)浏览时,它会将您的IP缓存为“安全”,然后允许来自您的IP的任何用户代理下载任何内容 :)


我尝试了你的建议并使用了我的浏览器中的UA,但没有帮助。这似乎是时好时坏的,今天早上打开电脑时无论设置如何都可以正常工作,但最近却停止了工作。这可能与防火墙有关吗?还是可能是其他问题? - user1192537

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接