使用 python 获取 http header(获取 405)
Getting http header with python (getting 405)
我正在尝试在 python 中创建一个基本的 link 检查器。
使用以下代码时:
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
它通常有效,而且速度非常快,但有时 return HTTP 405(对于 link 并没有真正损坏)。
为什么我会收到 405(方法错误)错误?我该怎么做才能快速检查损坏的 link?
谢谢
根据 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
是一种 "good" 错误 - 资源存在,但无法使用 HEAD
。您还可以检查 Allow
response header 值,其中 必须设置 以响应您的 HEAD
请求:
The Allow entity-header field lists the set of methods supported
by the resource identified by the Request-URI. The purpose of this
field is strictly to inform the recipient of valid methods
associated with the resource. An Allow header field MUST be
present in a 405 (Method Not Allowed) response.
如果你想抓取一些网页,你的请求可能是 GET 方法,如果没问题,它应该是 return 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
希望对您有所帮助!
对于 requests.get,您正在正确获取信息,因为 GET 方法意味着检索由 Request-URI 标识的任何信息(以实体的形式),而 requests.Head 服务器不't return 消息正文在响应中。
请注意,HEAD 方法与 GET 方法相同,只是服务器不得 return 响应中的消息正文。
我正在尝试在 python 中创建一个基本的 link 检查器。
使用以下代码时:
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
它通常有效,而且速度非常快,但有时 return HTTP 405(对于 link 并没有真正损坏)。
为什么我会收到 405(方法错误)错误?我该怎么做才能快速检查损坏的 link? 谢谢
根据 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
是一种 "good" 错误 - 资源存在,但无法使用 HEAD
。您还可以检查 Allow
response header 值,其中 必须设置 以响应您的 HEAD
请求:
The Allow entity-header field lists the set of methods supported by the resource identified by the Request-URI. The purpose of this field is strictly to inform the recipient of valid methods associated with the resource. An Allow header field MUST be present in a 405 (Method Not Allowed) response.
如果你想抓取一些网页,你的请求可能是 GET 方法,如果没问题,它应该是 return 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
希望对您有所帮助!
对于 requests.get,您正在正确获取信息,因为 GET 方法意味着检索由 Request-URI 标识的任何信息(以实体的形式),而 requests.Head 服务器不't return 消息正文在响应中。
请注意,HEAD 方法与 GET 方法相同,只是服务器不得 return 响应中的消息正文。