2013-07-04 28 views
1

下面的代碼工作,但給人即使有文件實例躺在後面響應無輸出HTTP認證頭,沒有「境界」

import urllib2 
from ntlm import HTTPNtlmAuthHandler 

user = 'id' 
password = "Password" 
url = "http://abc.def.ghij:3080" 

passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, url, user, password) 
# create the NTLM authentication handler 
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) 

# create and install the opener 
opener = urllib2.build_opener(auth_NTLM) 
urllib2.install_opener(opener) 

# retrieve the result 
response = urllib2.urlopen("http://abc.def.ghij:3080") 
print response.read() 
print response.headers 

頭回應:

Cache-Control: private 

Content-Length: 0 

Location: /index.epx 

Server: Microsoft-IIS/7.5 

X-AspNet-Version: 4.19 

Persistent-Auth: true 

X-Powered-By: ASP.NET 

Date: Thu, 04 Jul 2013 15:30:03 GMT 

Connection: close 

print response.read不提供任何內容:O

回答

1
WWW-Authenticate: Negotiate 
WWW-Authenticate: NTLM 

問題是您的Web服務器正在請求NTLM身份驗證,因此它不會接受BasicAuth。在發送請求時使用NTML身份驗證,或更改您的Web服務器配置以允許基本身份驗證。

不要使用BasicAuth,因爲它通過網絡以明文形式發送用戶/密碼。最低安全級別是DigestAuth或NTLM或GSSNegotiate身份驗證。

+1

通過安全連接(SSL/TLS)可以接受基本身份驗證,但我同意摘要更好。但是,我仍然將Digest保持在一個安全的連接上,因爲它依賴於MD5,它存在一些已證實的缺陷。另外,我收集[Microsoft不再推薦NTLM](http://msdn.microsoft.com/zh-cn/library/cc236715.aspx)。從安全的角度來看,最好的選擇可能是用於身份驗證的客戶端證書,但對於用戶來說這可能很麻煩。 – Cartroo

+0

@Webmaster在www.dekh我實施了你的建議其工作,但我在這裏奇怪的問題...請看看編輯的問題! – Sangamesh

+0

問題解決..謝謝你這麼多傢伙! – Sangamesh