使用python获取http标头(获得405)

时间:2015-01-04 07:32:14

标签: python http python-requests

我正在尝试在python中创建一个基本的链接检查器。

使用以下代码时:

def get_link_response_code(link_to_check):  
    resp = requests.get(link_to_check)
    return resp.status_code

我总是得到正确的响应代码,但需要花费相当多的时间。

但是在使用这段代码时:( requests.get替换为requests.head)

def get_link_response_code(link_to_check):  
    resp = requests.head(link_to_check)
    return resp.status_code

它通常可以正常工作,而且非常快,但有时会返回HTTP 405(对于一个并没有真正破坏的链接)。

为什么我会收到405(错误的方法)错误?我该怎么做才能快速检查断开的链接? 感谢。

3 个答案:

答案 0 :(得分:4)

根据specification405表示Method not allowed表示您无法将HEAD用于此特定资源

处理它并在这些情况下使用get()

def get_link_response_code(link_to_check):
    resp = requests.head(link_to_check)
    if resp.status_code == 405:
        resp = requests.get(link_to_check)
    return resp.status_code

作为旁注,您可能不需要额外get(),因为405是一种好的"}错误 - 资源存在,但HEAD不可用。您还可以根据HEAD请求检查必须设置Allow response header

  

Allow entity-header字段列出了支持的方法集         由Request-URI标识的资源。这个目的         字段严格告知收件人有效方法         与资源相关联。一个Allow头字段必须是         存在于405(不允许的方法)响应中。

答案 1 :(得分:2)

对于requests.get,您正在获取正确的信息,因为GET方法意味着在请求时检索Request-URI标识的任何信息(以实体的形式).Head服务器不返回消息体在回应中。

请注意,HEAD方法与GET相同,但服务器不得在响应中返回消息正文。

答案 2 :(得分:0)

如果你正在尝试抓取一些网页,你的请求可能是GET方法,它应该返回200如果可以,但也许有些conf不允许GET方法从程序开始一段时间,你可以添加一些这样的代码:

def get_link_response_code(link_to_check):
  try:
    resp = requests.head(link_to_check)
    if resp.status_code != 200:
      print "error"
    else:
      reutrun resp.status_code
  except Exception,error:
    print error

  return None
希望有所帮助!