urllib 忽略认证请求

0 投票
1 回答
1409 浏览
提问于 2025-04-15 20:01

我在创建一个处理网址的脚本时遇到了一些小问题。我正在使用urllib.urlopen()来获取想要的网址内容。但是,有些网址需要我登录才能访问。每当我访问这些网址时,urlopen会让我输入用户名和密码。

我想要的是忽略所有需要登录的网址,直接跳过它们,继续处理其他网址,有没有办法做到这一点呢?我在想是不是可以捕捉HTTPError这个错误,但实际上,这个错误是由urlopen()方法处理的,所以这样做并不奏效。

谢谢大家的回复。

1 个回答

1

你说得对,关于urllib2.HTTPError这个异常:

exception urllib2.HTTPError

虽然它是一个异常(属于URLError的子类),但HTTPError也可以像普通文件一样返回值(和urlopen()返回的东西一样)。这在处理一些特殊的HTTP错误时很有用,比如需要身份验证的请求。

code

这是一个HTTP状态码,按照RFC 2616的定义。这个数字对应于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
>>> 

撰写回答