我在创建使用URL的脚本时遇到了一些麻烦。我正在使用urllib.urlopen()来获取所需URL的内容。但其中一些URL需要身份验证。并且urlopen提示我输入我的用户名然后输入密码。 我需要的是忽略每个需要身份验证的URL,只需轻松跳过它并继续,有没有办法做到这一点? 我想知道捕获HTTPError异常,但事实上,异常是由urlopen()方法处理的,所以它不起作用。
感谢您的回复。
答案 0 :(得分:1)
你对urllib2.HTTPError
例外是对的:
exception urllib2.HTTPError
虽然是一个例外(URLError的子类),但HTTPError也可以作为一个非特殊的文件类返回值(与urlopen()返回的相同)。这在处理异常HTTP错误时很有用,,例如身份验证请求。
code
RFC 2616中定义的HTTP状态代码。此数值对应于在BaseHTTPServer.BaseHTTPRequestHandler.responses中找到的代码字典中找到的值。
异常的代码属性可用于验证是否需要身份验证 - 代码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
>>>