【发布时间】:2011-01-23 17:59:45
【问题描述】:
我在创建使用 URL 的脚本时遇到了一些问题。我正在使用 urllib.urlopen() 来获取所需 URL 的内容。但其中一些 URL 需要身份验证。 urlopen 提示我输入我的用户名和密码。 我需要的是忽略每个需要身份验证的 URL,只需轻松跳过它并继续,有没有办法做到这一点? 我想知道捕获HTTPError异常,但实际上异常是由urlopen()方法处理的,所以它不起作用。
感谢您的每一个回复。
【问题讨论】:
我在创建使用 URL 的脚本时遇到了一些问题。我正在使用 urllib.urlopen() 来获取所需 URL 的内容。但其中一些 URL 需要身份验证。 urlopen 提示我输入我的用户名和密码。 我需要的是忽略每个需要身份验证的 URL,只需轻松跳过它并继续,有没有办法做到这一点? 我想知道捕获HTTPError异常,但实际上异常是由urlopen()方法处理的,所以它不起作用。
感谢您的每一个回复。
【问题讨论】:
您对urllib2.HTTPError 异常的看法是正确的:
exception urllib2.HTTPError虽然是一个异常(URLError 的子类),但 HTTPError 也可以用作非异常的类似文件的返回值(与 urlopen() 返回的相同)。这在处理特殊的 HTTP 错误时很有用,例如身份验证请求。
codeRFC 2616 中定义的 HTTP 状态代码。此数值对应于在 BaseHTTPServer.BaseHTTPRequestHandler.responses 中找到的代码字典中的值。
异常的code属性可以用来验证是否需要认证——代码401。
>>> try:
... conn = urllib2.urlopen('http://www.example.com/admin')
... # read conn and process data
... except urllib2.HTTPError, x:
... print 'Ignoring', x.code
...
Ignoring 401
>>>
【讨论】: