通常,我们使用python urllib2库请求认证URL,用法为this page描述,但这将导致2个服务器请求,第一个响应401错误,然后第二个是客户端将username / passwd编码为认证头并再次请求。但是,如果您确实知道领域和(用户名,密码),您只能直接访问该网址一次。我可以通过将身份验证信息编码到请求标头中来执行此操作,并且它只请求一次,但我无法使用HTTPPasswordMgrWithDefaultRealm和相关类来执行此操作。
只有一次请求代码:
import urllib2, base64
url = 'http://xxxx'
username = 'jpx'
passwd = 'jpx123'
b64str = base64.encodestring('%s:%s' % (username, passwd))
req = urllib2.Request(url)
auth = 'Basic %s' % b64str
req.add_header('Authorization', auth)
try:
opener = urllib2.urlopen(req)
except IOError, e:
print str(e)
print opener.read()
答案 0 :(得分:1)
是的,这就是来自urllib
的密码管理器的工作方式。它仅在从服务器接收401
后发送身份验证信息。你可以继承许多东西并改变这种行为,但是就像你在例子中那样自己将信息编码到头中似乎更容易。