2009-07-03 93 views
2

我試圖測試與Nexus服務器的交互,該服務器需要對我打算使用的操作進行身份驗證,但我還需要處理內部代理服務器。使用httplib2處理身份驗證和代理服務器

基於我(有限)的理解,我可以添加多個處理程序的開罐器。不過,我仍然收到了401迴應。我檢查了用戶名和密碼是否有效。我不確定是否需要cookie來做到這一點,如果是的話,他們將如何包含它們。 有什麼建議嗎?

baseUrl = 'server:8070/nexus-webapp-1.3.3/service/local' 

params = {"[key]":"[value]"} 

data = urllib.urlencode(params) 

# create a password manager 
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 

# Add the username and password as supplied 
password_mgr.add_password(None, baseUrl, username, password) 

handler = urllib2.HTTPBasicAuthHandler(password_mgr) 
proxy_support = urllib2.ProxyHandler({}) 

# create "opener" (OpenerDirector instance) 
opener = urllib2.build_opener(proxy_support, handler) 
urllib2.install_opener(opener) 

txheaders = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'} 

req = Request(protocol+url, data, txheaders) 
handle = urlopen(req) 

這是導致URLError的頭字段:

>HTTPMessage: Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=B4BD05C9582F7B27495CBB675A339724; Path=/nexus-webapp-1.3.3 
WWW-Authenticate: NxBASIC realm="Sonatype Nexus Repository Manager API" 
Content-Type: text/html;charset=utf-8 
Content-Length: 954 
Date: Fri, 03 Jul 2009 17:38:42 GMT 
Connection: close 

更新 看來的Nexus實施Restlet's AuthenticationHelper的定製版本。感謝Alex,我知道該找什麼。

回答

3

你能看到你正在收到的401響應的完整標題嗎?也許這不是一個基本的身份驗證請求,也許它是代理需要自己的身份驗證 - 很難猜測沒有看到所說的頭文件!

編輯:謝謝你顯示標題(我將它們重新格式化爲「代碼」,否則它們是不可讀的)。我想,它不想要「基本」,它想要其他一些(Nexus專有...?)「NxBASIC」認證協議 - 我從來沒有聽說過它(我什麼都不知道)關於Nexus),我想也沒有你正在使用的基本身份驗證處理程序(即使NxBASIC以某種方式接受了純粹的基本身份驗證,處理程序只知道它是不同的協議,不會提供這種身份驗證)。

因此,首先您需要研究NxBASIC事件的確切內容,爲此我懷疑使用正確標籤的SO問題可能會有所幫助。然後,根據你學到的東西,爲它定義一個處理程序有趣的問題...! - (

+0

謝謝亞歷克斯,更新了問題 – 2009-07-03 17:41:04

相關問題