Python 如何在不淹没请求的情况下批量检查URL状态代码

Python 如何在不淹没请求的情况下批量检查URL状态代码,python,python-requests,Python,Python Requests,我有一个要求,检查,在一个持续的基础上,由许多URL返回的状态代码。在同一个域上最多可以有50000个 我担心这样做会导致请求充斥整个站点,并影响性能,而这是不可能发生的 我目前的做法是使用requests.head,以最小化响应的大小,但我不确定我需要了解的其他上下文: 是否有限制速率请求的最佳实践 如何最好地平衡执行时间 这是否足以确保跨特定域运行此操作不会产生负面影响 我找过类似的话题,但似乎找不到这个,所以如果这个问题在别处得到解决,我深表歉意 谢谢对于限制对web服务器的请求速率,

我有一个要求,检查,在一个持续的基础上,由许多URL返回的状态代码。在同一个域上最多可以有50000个

我担心这样做会导致请求充斥整个站点,并影响性能,而这是不可能发生的

我目前的做法是使用
requests.head
,以最小化响应的大小,但我不确定我需要了解的其他上下文:

  • 是否有限制速率请求的最佳实践
  • 如何最好地平衡执行时间
  • 这是否足以确保跨特定域运行此操作不会产生负面影响
我找过类似的话题,但似乎找不到这个,所以如果这个问题在别处得到解决,我深表歉意


谢谢

对于限制对web服务器的请求速率,没有通用的最佳实践。所有命中web服务器的web请求都会在一定程度上影响该服务器的性能


特定web服务器可以处理的请求数量完全取决于web框架、硬件和API方法中代码的复杂性等因素。如果您查看一个简单的
{“message”:“Hello,World!”
响应,您会发现这可能会有很大的变化。

这只是为了确保服务器不会将我认为所有请求都来自同一个地方的请求列入黑名单,如果这也是您的意图之一。它仍然会淹没服务器,但会试图欺骗服务器,使其认为请求不是来自同一个地方。有时,我也会在VPN之间切换以拥有不同的IP

这是使用假用户代理的一个片段:

from fake_useragent import UserAgent
ua1 = UserAgent()
randomHeader = {'User-Agent':str(ua1.random)}
page = requests.get(restListLink, randomHeader)
如果在请求之间设置延迟不是您关心的问题,那么您还可以尝试在请求之间添加随机延迟机制。对于延迟,您可以检查睡眠功能

import time
time.sleep(0.100)

@samg86询问“这是否足以确保没有负面影响……”。在每个请求中传递不同的用户代理只是试图绕过web服务器的防御。此外,每秒10个请求可能会淹没服务器,我们无法给出一个普遍安全的数字。我在回答中提到:“它仍然会淹没服务器,但是…”“我们无法给出一个普遍安全的数字”,如果时间不是一个约束条件,通过引入睡眠机制对此进行了详细说明。对于大多数服务器,每秒最多10个请求可能就可以了。但是,一个特定的服务器可能无法处理该负载,或者该负载可能会触发某种防御。更改用户代理可能不足以回避该防御,因为服务器可能会查看请求的其他特征,例如原始IP地址。我们正在进入DDOS缓解技术的世界。有一篇很好的文章介绍了他如何根据对HIBP API的请求频率实现IP地址的自动阻塞。他的阈值是每1.5秒请求一次。