如何直接使用python请求经过身份验证的URL

时间:2009-10-12 13:57:54

标签: python authentication urllib2

我想使用urllib2访问经过身份验证的页面。我希望有一个黑客直接做到这一点。类似的东西:

urllib2.urlopen('http://username:pwd@server/page')

如果没有,我该如何使用身份验证?

2 个答案:

答案 0 :(得分:2)

这取决于使用的身份验证类型。

  • 一个简单的例子是Http Authentication
  • 如果网站使用Cookie进行身份验证,则需要添加cookiejar并通过http
  • 登录
  • 还有更多的身份验证方案,所以找出你需要的方案。

答案 1 :(得分:1)

AFAIK,没有一种简单的方法可以做到这一点。基本上,您发出请求,服务器响应所需的401授权,urllib2转换为异常。

  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python25\lib\urllib2.py", line 124, in urlopen
    return _opener.open(url, data)
  File "C:\Python25\lib\urllib2.py", line 387, in open
    response = meth(req, response)
  File "C:\Python25\lib\urllib2.py", line 498, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python25\lib\urllib2.py", line 425, in error
    return self._call_chain(*args)
  File "C:\Python25\lib\urllib2.py", line 360, in _call_chain
    result = func(*args)
  File "C:\Python25\lib\urllib2.py", line 506, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
  urllib2.HTTPError: HTTP Error 401: Authorization Required 

您必须捕获此异常,创建urllib2.HTTPPasswordManager对象,将用户名和密码添加到HTTPPasswordManager,创建urllib2.HTTPBasicAuthHandler对象,创建一个opener对象,最后使用opener获取url。代码和教程可在此处获取:http://www.voidspace.org.uk/python/articles/urllib2.shtml#id5