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

ibr*_*ead 2 python http

我正在写一个死链接探测器,想知道我应该使用哪个lib,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)
Run Code Online (Sandbox Code Playgroud)

但我对上述两种方法返回的结果不匹配感到困惑,这两种方法是:

(302,'发现')
200

我想也许是因为urllib自动检测重定向并获取最终目标页面,然后返回响应代码?

谢谢.

Ale*_*lli 5

302是重定向的HTTP状态代码(例如,参见此处),并且httplib(较低级别的库)忠实地返回它,同时urllib自动跟随重定向并为您提供最终的结果状态代码(200"一切正常").

选择最适合您想要工作的抽象层的库 - httplib为您提供更多控制,但它不那么通用(例如ftp:,对于其他协议(例如,等等)的URL不会做任何事情)和更低级别的(所以你必须做更多的工作! - ).