【问题标题】:why does response codes returned by httplib and urllib not match?为什么httplib和urllib返回的响应码不匹配?
【发布时间】:2010-07-01 04:22:57
【问题描述】:

我正在编写一个死链接检测器,想知道我应该使用哪个库,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 自动检测重定向并获取最终目标页面,然后返回响应码?

谢谢。

【问题讨论】:

    标签: python http


    【解决方案1】:

    302 是重定向的 HTTP 状态代码(参见例如 here),httplib(低级库)忠实地返回它,而 urllib 会自动跟随重定向并为您提供最终生成的状态代码(200 表示“一切正常”)。

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

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2020-10-19
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多