我正在尝试在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(错误的方法)错误?我该怎么做才能快速检查断开的链接? 感谢。
答案 0 :(得分:4)
根据specification,405
表示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
希望有所帮助!