2

我正在尝试测试与需要对我打算使用的操作进行身份验证的 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 的 headers 字段:

>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 的 AuthenticationHelper的自定义版本。感谢亚历克斯,我知道要寻找什么。

4

1 回答 1

3

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

编辑:感谢您显示标题(我将它们重新格式化为“代码”,否则它们不可读)。

正如我所怀疑的那样,它不需要“基本”,它需要其他一些(Nexus 专有......?)“NxBASIC”身份验证协议——我从未听说过它(我对 Nexus 一无所知)和我想您正在使用的基本身份验证处理程序都没有(即使 NxBASIC 以某种方式接受了普通的基本身份验证,处理程序只知道它是不同的协议,不会提供这种身份验证)。

因此,首先您需要准确研究 NxBASIC 是什么,为此我怀疑带有正确标签的 SO 问题可能会有所帮助。然后,根据您学到的知识,为它定义处理程序的有趣问题出现了......!-(

于 2009-07-03T17:22:58.803 回答