Python 使用requests.head的max_retries设置获取状态代码
如图所示,可以为Python 使用requests.head的max_retries设置获取状态代码,python,python-requests,Python,Python Requests,如图所示,可以为请求.Session()设置最大重试次数,但我只需要头.status\u code来检查url是否有效且处于活动状态 有没有一种方法可以让头部在装载过程中移动 import requests def valid_active_url(url): try: site_ping = requests.head(url, allow_redirects=True) except requests.exceptions.ConnectionError:
请求.Session()
设置最大重试次数
,但我只需要头.status\u code
来检查url是否有效且处于活动状态
有没有一种方法可以让头部在装载过程中移动
import requests
def valid_active_url(url):
try:
site_ping = requests.head(url, allow_redirects=True)
except requests.exceptions.ConnectionError:
print('Error trying to connect to {}.'.format(url))
try:
if (site_ping.status_code < 400):
return True
else:
return False
except Exception:
return False
return False
我们是否只使用s.mount()
进入并设置最大重试次数
?除了预先建立http连接之外,这似乎是一种冗余
另外,resp.status\u code
返回200
,我希望看到301
(这是请求的。head
返回的内容)
注意:
resp.ok
可能就是我在这里所需要的全部内容。在仅仅两个小时的问题发展之后,答案花了五分钟:
def valid_url(url):
if (url.lower() == 'none') or (url == ''):
return False
try:
s = requests.Session()
a = requests.adapters.HTTPAdapter(max_retries=5)
s.mount(url, a)
resp = s.head(url)
return resp.ok
except requests.exceptions.MissingSchema:
# If it's missing the schema, run again with schema added
return valid_url('http://' + url)
except requests.exceptions.ConnectionError:
print('Error trying to connect to {}.'.format(url))
return False
基于此,看起来head
请求的资源密集度略低于get,尤其是在url包含大量数据的情况下
是作为请求库基础的urllib3库的内置适配器
另一方面,我不确定我在这里检查的正确术语或短语是什么。如果url返回错误代码,它可能仍然有效。
。mount
不会发出请求。“装载调用将传输适配器的特定实例注册到前缀。装载后,使用该会话(其URL以给定前缀开头)发出的任何HTTP请求都将使用给定的传输适配器。”是的。我想我不会只是盯着“传输适配器到前缀”,我应该看看这是什么意思。这与“我尝试过的第一种方法”有什么不同?第一种方法没有重试。我一直在一些URL上得到连接错误,这些URL是301 Forward。我指的是你引用的部分。我想你在写问题时已经回答了这个问题,只是没有将它包装在错误处理中!唯一的区别是在解决方案中,我替换了s.get
withs.head
我希望它需要更少的网络活动,但是在写了这么多问题之后,我认为它值得发布。如果你有时间发布一个更雄辩的答案,我很乐意接受。
def valid_url(url):
if (url.lower() == 'none') or (url == ''):
return False
try:
s = requests.Session()
a = requests.adapters.HTTPAdapter(max_retries=5)
s.mount(url, a)
resp = s.head(url)
return resp.ok
except requests.exceptions.MissingSchema:
# If it's missing the schema, run again with schema added
return valid_url('http://' + url)
except requests.exceptions.ConnectionError:
print('Error trying to connect to {}.'.format(url))
return False