2009-07-14 83 views
16

尝试镜像本地Intranet站点并使用'wget'找到以前的问题。它对于匿名网站非常有效,但我无法将其用于期望用户名\密码的站点(带有集成Windows身份验证的IIS)。使用wget反对受保护的站点与NTLM

下面是我通过:

的wget -c --http-USER = '域\用户' --http密码= PWD http://local/site -dv

这里是调试输出(请注意我替换了一些虚拟值明显):

 
Setting --verbose (verbose) to 1 
DEBUG output created by Wget 1.11.4 on Windows-MSVC. 

--2009-07-14 09:39:04-- http://local/site 
Host `local' has not issued a general basic challenge. 
Resolving local... seconds 0.00, x.x.x.x 
Caching local => x.x.x.x 
Connecting to local|x.x.x.x|:80... seconds 0.00, connected. 
Created socket 1896. 
Releasing 0x003e32b0 (new refcount 1). 

---request begin--- 
GET /site/ HTTP/1.0 
User-Agent: Wget/1.11.4 
Accept: */* 
Host: local 
Connection: Keep-Alive 

---request end--- 
HTTP request sent, awaiting response... 
---response begin--- 
HTTP/1.1 401 Access Denied 
Server: Microsoft-IIS/5.1 
Date: Tue, 14 Jul 2009 13:39:04 GMT 
WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 
Content-Length: 4431 
Content-Type: text/html 

---response end--- 
401 Access Denied 
Closed fd 1896 
Unknown authentication scheme. 
Authorization failed. 

回答

9

NTLM身份验证在wget 1.11中被破坏,改为使用1.10。

+4

添加一个链接到相关的bug票据将在这里有用 – Daenyth 2010-10-16 20:28:56

+0

无法测试它是否属实。但我确认NTLM情况下标准输出的不同行为。 http://www.mail-archive.com/[email protected]/msg00003.html – 2010-10-18 15:42:27

7

Curl实际上可能是从NTLM认证的Web服务器获取内容的更好工具。您可以通过使用得到一个同等功能的你提出的wget命令行:

curl --anyauth --user username:password http://someserver/site 
0

使用-–auth-no-challenge选项(wget的1.11+)

1

我找到了解决方案。
它适用于基本身份验证IIS7。

当AUTH是successeful它发送一个HTTP标头:

'Authorization: <type> <credentials>'. 

所以我们能够做授权,浏览器和 复制这个头PARAMS从浏览器(萤火虫插件)或产生:

$ echo -en 'username:password' | base64 
dXNlcm5hbWU6cGFzc3dvcmQK 
$ echo 'dXNlcm5hbWU6cGFzc3dvcmQK' | base64 -d 
username:password 

示例:

$ wget --header="Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQK" http://example.com/