为什么httplib和urllib返回的响应代码不匹配?

2 投票
1 回答
588 浏览
提问于 2025-04-16 00:39

我正在写一个死链接检测器,想知道应该使用哪个库,httplib还是urllib,所以我两个都试了一下。

def http_response_code(url):
    host = urlparse(url)[1]
    req = '/'.join(urlparse(url)[2:5])
    conn = httplib.HTTPConnection(host)
    conn.request('HEAD', req)
    res = conn.getresponse()
    return res.status, res.reason

def urllib_response_code(url):
    a = urllib.urlopen(url)
    return a.getcode()


def main():
    url = 'http://1010wins.com/content_page.php?contenttype=4&contentid=6077355'
    print http_response_code(url)
    print urllib_response_code(url)

但是我对这两种方法返回的结果不太明白,它们的结果是:

(302, '找到')
200

我觉得可能是因为urllib会自动检测重定向,并获取最终的目标页面,然后返回响应代码?

谢谢。

1 个回答

5

302 是一个HTTP状态码,表示需要重定向(你可以在 这里 查看详细信息)。而 httplib 这个底层库会准确地返回这个状态码,但 urllib 则会自动跟随这个重定向,并给你最终的状态码(如果一切正常,它会返回 200)。

选择最适合你想要工作的库吧——httplib 给你更多的控制权,但它的功能比较有限(比如它不会处理其他协议的URL,如 ftp: 等等),而且它是一个底层库(所以你需要做更多的工作!)。

撰写回答