频繁请求报requests异常的处理

Posted df888

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了频繁请求报requests异常的处理相关的知识,希望对你有一定的参考价值。

由于数据量的增大,调用接口的次数会增加。

当连续向目标网站发送多次request后,目标网站可能会认为是,恶意攻击。

于是会抛出requests异常。

测试代码:

for i in range(200):  # 连续请求200次
    requests.post(p[url], headers=p[headers], json=p[body], verify=False)

在python3.6中,异常为

requests.exceptions.SSLError: HTTPSConnectionPool(host=‘‘, port=443): Max retries exceeded with url:  
(Caused by SSLError(SSLError("bad handshake: SysCallError(-1, ‘Unexpected EOF‘)",),))

在python3.7中,异常为

requests.exceptions.ConnectionError: (‘Connection aborted.‘, ConnectionResetError(10054, ‘远程主机强迫关闭了一个现有的连接。‘, None, 10054, None))

尝试百度了不少方法,如time.sleep(1),response.close(),socket.setdefaulttimeout(20)。

要么无效果,要么经不起多次验证。

既然是异常,那么就try呗。

把异常捕获,重新请求一次。

在等待异常过程中,变相的time.sleep了。

按照这个思路,写代码,验证,目前来看还是相对靠谱的。

while True:  # 循环
    try:
        r = eval(expression)
    except (requests.exceptions.SSLError, requests.exceptions.ConnectionError) as e:
        if bad handshake in str(e) or 10054 in str(e):  # 上述2种异常
            continue  # 继续发请求
        else:
            raise Exception(e)  # 其他异常,抛出来
    break  # 无异常就跳出循环
return r  # 返回响应结果

以上是关于频繁请求报requests异常的处理的主要内容,如果未能解决你的问题,请参考以下文章

如何利用线程池解决调用第三接口出现 429 too many requests问题?

Nginx request line 换行导致的 400 异常分析

requests库之请求异常处理

vs2022异常报错,报错内容见描述,求解法?

python requests请求卡住问题

Cannot assign requested address 问题