0

我想使用 urllib2 访问经过身份验证的页面。我希望有一个黑客可以直接做到这一点。就像是:

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

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

4

2 回答 2

2

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

  • 一个简单的例子是Http Authentication
  • 如果站点使用 cookie 进行身份验证,您需要添加cookiejar并通过 http 登录
  • 还有更多的身份验证方案,所以找出你需要的。
于 2009-10-12T14:07:20.987 回答
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

于 2009-10-12T14:14:58.520 回答