python-3.x - Python 请求 - 重试任何状态码,但不是 400
问题描述
我正在使用以下片段(请注意,仅显示部分片段):
from urllib3.util import Retry
status_forcelist = (500, 502, 504)
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
method_whitelist=frozenset(['GET', 'POST'])
到目前为止,将对状态码500
, 502
,进行重试504
。但是,我打算重试任何状态码,但不是400
. status_forcelist
有没有一种优雅的方法来实现这一点,而不是为所有状态代码填充/硬编码?
解决方案
您可以从request
模块中获取代码 - 这样可以节省您将它们写出来的时间。如果引入任何新的,您也会拥有它们:
import requests
from urllib3.util import Retry
status_forcelist = tuple( x for x in requests.status_codes._codes if x != 400)
print(status_forcelist)
输出:
(100, 101, 102, 103, 122, 200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302,
303, 304, 305, 306, 307, 308, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
413, 414, 415, 416, 417, 418, 421, 422, 423, 424, 425, 426, 428, 429, 431, 444, 449, 450,
451, 499, 500, 501, 502, 503, 504, 505, 506, 507, 509, 510, 511)
警告:维基百科列出“自创”/非官方状态代码以及 9xx 左右的专有状态代码,但此列表未涵盖。@zwer 解决方案也将涵盖这些。
推荐阅读
- php - 将订单货币添加到订单备注 woocommerce
- mongodb - MongoDB - 检查数组中的属性出现
- authentication - 我的 Auth0 API 应该拥有哪些权限来处理登录和注册?
- javascript - 如何使用 NodeJS、Express 和 Mongoose 使 get 方法在按钮单击时读取带有参数的 url
- javascript - 如何在不使用“innerHTML”的情况下更改大部分 HTML
- android - RecyclerView 不想在使用 MotionLayout 时显示项目
- javascript - 我如何从 Nodje.js / Javascript 中的回调中获取值,以访问对查询的响应的值,使用 mysql
- rabbitmq - 用于 Windows 每周日志轮换的 RabbitMQ 3.8.2 不适用于每晚重新启动
- javascript - HTML - 多个解析器错误:StartTag:无效元素名称
- macos - 有没有办法在 objc 或 swift (macos Big Sur) 中验证代码签名