如何从python urllib的urlopen中获取HTTP返回码?

5 投票
2 回答
10815 浏览
提问于 2025-04-17 15:24

我有以下这段代码:

f = urllib.urlopen(url)
html = f.read()

我想知道打开上面这个网址时返回的HTTP状态码(比如HTTP 200、404等)。

有没有人知道怎么做到这一点?

附注:我使用的是Python 2.5。

谢谢!!!

2 个回答

3

getcode() 这个功能是在 Python 2.6 版本中才加入的。根据我所知道的,在 2.5 版本中,没有办法直接从请求中获取状态码。不过,FancyURLopener 提供了一些函数,这些函数会在遇到特定错误代码时被调用——你可以利用这个功能把状态码保存到某个地方。我对它进行了子类化,以便在出现 404 错误时能得到通知。

import urllib

class TellMeAbout404s(urllib.FancyURLopener):
    def http_error_404(self, url, fp, errcode, errmsg, headers, data=None):
        print("==== Got a 404")

opener = TellMeAbout404s()
f = opener.open("http://www.google.com/sofbewfwl")
print(f.info())

info() 可以提供 HTTP 头信息,但不能提供状态码。

12

你可以使用通过 urlopen() 得到的对象的 .getcode() 方法。

url = urllib.urlopen('http://www.stackoverflow.com/')
code = url.getcode()

撰写回答