如何使用python的urllib2库只请求一次验证URL,而不是两次

时间:2011-04-06 09:28:50

标签: python authentication urllib2

通常,我们使用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()
    

1 个答案:

答案 0 :(得分:1)

是的,这就是来自urllib的密码管理器的工作方式。它仅在从服务器接收401后发送身份验证信息。你可以继承许多东西并改变这种行为,但是就像你在例子中那样自己将信息编码到头中似乎更容易。