使用httplib2处理身份验证和代理服务器

时间:2009-07-03 17:07:13

标签: python nexus httplib2

我正在尝试测试与需要对我打算使用的操作进行身份验证的Nexus服务器的交互,但我还需要处理内部代理服务器。

根据我的(有限的)理解,我可以为开启者添加多个处理程序。但是我仍然得到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,我知道该找什么。

1 个答案:

答案 0 :(得分:3)

您能否显示您获得的401响应的完整标题?也许这不是一个基本的身份验证请求,也许是代理想要自己的身份验证 - 如果没有看到所述标题就很难猜到!

修改:感谢您显示标题(我将其重新格式化为“代码”,否则它们无法读取)。

我怀疑它不想要“基本”,它想要一些其他的(Nexus专有......?)“NxBASIC”认证协议 - 我从来没有听说过它(我什么都不知道Nexus),我想也没有你正在使用的基本身份验证处理程序(即使NxBASIC以某种方式接受了普通的基本身份验证,处理程序,只知道它是一个不同的协议,不会提供这样的身份验证)。

所以,首先你需要准确研究NxBASIC是什么,为此我怀疑使用正确标签的SO问题可能有所帮助。然后,根据你学到的东西,为它定义一个处理程序是有趣的问题......! - (