当Python请求库遇到重试限制时如何访问服务器响应

2024-03-16

我正在使用 Python requests 库来实现重试逻辑。这是我为重现我遇到的问题而制作的一个简单脚本。在重试次数用完的情况下,我希望能够记录来自服务器的至少一个响应以帮助调试。但是,我不清楚如何访问该信息。当然,我可以以其他方式实现重试来实现我的目标,但这似乎并不是什么边缘情况,我会惊讶地发现请求不支持我的用例。

我查看了 requests.packages.urllib3.exceptions.MaxRetryError 所包装的 requests.exceptions.RetryError 以及 requests.packages.urllib3.exceptions.ResponseError 所包装的所有内容均无济于事。

我错过了什么吗?

#!/usr/bin/env python

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from requests.exceptions import RetryError


def main():
    retry_policy = Retry(
        total=3,
        status_forcelist=[418])

    session = requests.Session()
    session.mount('http://', HTTPAdapter(max_retries=retry_policy))

    try:
        session.get('http://httpbin.org/status/418')
    except RetryError as retry_error:
        print retry_error
        print retry_error.response is None


if __name__ == '__main__':
    main()

$ python 测试.py

HTTPConnectionPool(host='httpbin.org', port=80): Max retries exceeded with url: /status/418 (Caused by ResponseError('too many 418 error responses',))

True

查看 urllib3 源代码,我发现Retry对象采用一个名为的命名参数raise_on_status. True是默认值。当设置为False,遇到重试限制会导致返回响应而不是引发异常。下面的代码显示我造成了HTTPError(包含Response)通过使用抛出raise_for_status方法上的Response,但人们也可以轻松地使用Response直接地。

#!/usr/bin/env python

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from requests.exceptions import HTTPError


def main():
    retry_policy = Retry(
        total=3,
        status_forcelist=[418],
        raise_on_status=False)

    session = requests.Session()
    session.mount('http://', HTTPAdapter(max_retries=retry_policy))

    try:
        response = session.get('http://httpbin.org/status/418')
        response.raise_for_status()
    except HTTPError as e:
        print e.response.status_code
        print e.response.content


if __name__ == '__main__':
    main()

$ python 测试.py

418

-=[ teapot ]=-

   _...._
 .'  _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
  |       ;/
  \_     _/
    `"""`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当Python请求库遇到重试限制时如何访问服务器响应 的相关文章

  • 将字符串转换为带有毫秒和时区的日期时间 - Python

    我有以下 python 片段 from datetime import datetime timestamp 05 Jan 2015 17 47 59 000 0800 datetime object datetime strptime t
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 无法在 Linux Mint 19.3 中安装 R 3.6.2 中的 httr 包

    我对 R 完全陌生 我尝试安装httr包裹 我首先安装了 pacman 然后尝试通过运行来加载 httrpacman p load httr 它没有成功 它在终端中显示以下消息 将包安装到 home 用户名 R x86 64 pc linu
  • hdfs 命令在 hadoop 中已弃用

    我正在关注这个程序 http www codeproject com Articles 757934 Apache Hadoop for Windows Platform YouTube 链接 https www youtube com w
  • 如何从文本框获取值

    我改变了我的问题 因为它可能不被理解 也对不起我的英语 动态创建文本框 将它们放入数组中 我的一段代码 public partial class NewArticleForm System Web UI Page private Label
  • 响应式 JavaScript:仅针对小设备宽度执行代码

    我有一些简单的 JavaScript 嵌入在事件中 我只想为小型设备触发它们 电话等 目前我正在做 if window width lt 606 do things 但这感觉很笨拙 有没有办法只对小于某个断点的设备执行此操作 除了设置较早的
  • 为什么在 asp.net 身份中验证电话号码后注销?

    我在我的项目中使用 asp net Identity 在VerifyPhoneNumber查看 当用户确认他的电话号码时 他已注销 AspNetApplicationCookie已移除 我从 资源 选项卡 检查 chrome 中检查了这一点
  • 对多个项目和配置有效使用 Visual Studio 项目属性

    我一直使用 Visual Studio 内置的 GUI 支持来配置我的项目 通常使用属性表 以便多个项目将使用通用集 我对此的主要抱怨之一是管理多个项目 配置和平台 如果您只是使用主 GUI 执行所有操作 右键单击项目 gt 属性 它很快就
  • 如何用 GridLayoutManager 从右到左填充 RecyclerView

    我正在尝试将一些数据填充到RecyclerView with GridLayoutManager GridLayoutManager layoutManager new GridLayoutManager this 3 GridLayout
  • Visual Studio 2012 包管理器控制台错误

    当尝试使用包管理器控制台安装任何内容时 我收到此错误 Install Package The schema version of Microsoft Bcl is incompatible with version 2 0 30625 90
  • Coq:添加“强归纳”策略

    对自然数的 强 或 完全 归纳意味着当证明 n 上的归纳步骤时 您可以假设该属性对于任何 k 都成立 Theorem strong induction forall P nat gt Prop forall n nat forall k n
  • 常规网络服务

    我尝试过使用http groovy codehaus org GroovyWS http groovy codehaus org GroovyWS 在我的 BuildConfig groovy 中 我添加了 compile org code
  • 使用YQL多查询&XPath解析HTML,如何转义嵌套引号?

    标题比它必须的更复杂 这是问题查询 SELECT FROM query multi WHERE queries SELECT FROM html WHERE url http www stumbleupon com url http www
  • PHP 动态调整图像大小与存储调整大小的图像

    我正在构建一个图像共享网站 想了解使用 PHP 动态调整图像大小并存储调整后的图像的优缺点 哪个更快 哪个更可靠 两种方法在速度和性能上差距有多大 请注意 无论哪种方式 图像都会通过 PHP 脚本进行统计 例如视图 或者是否允许热链接等 因
  • 在 Java 中创建一个填充随机整数的文本文件

    也许是个愚蠢的问题 但我尝试用 512 个整数填充一个空文本文件 每个整数在每个新行上 我能够将它们随机化并写入文件中 但它们创建了一大堆我想要的数字 谁能帮我纠正我的代码吗 import java io BufferedWriter im
  • iOS 版 QtCreator:如何使用我的应用程序部署 dylib 共享库

    我在 iOS 上部署动态共享库时遇到了困难 为了隔离和暴露问题 我有一个非常简单的 HelloWorld 项目 一个库导出类 其中包含返回 Hello World 的函数 以及一个使用该类并显示消息的程序 我正在使用 QtCreator 和
  • Pods.framework 为红色,在 DerivedData 中不存在

    我正在尝试使用 Cocoapods 0 39 0 作为我的项目的依赖项 我已按照步骤操作 但最终在我的项目中得到了红色的 Pods framework 如果我查看 XCode 7 2 1 所说的路径 它不存在 Users ajmas Lib
  • 使用 fillna 在 Pandas 中用列表填充空值

    Given a pd Series 我想用列表替换空值 也就是说 给定 import numpy as np import pandas as pd ser pd Series 0 1 np nan 我想要一个会返回的函数 0 0 1 1
  • Aurelia 自定义元素:访问父方法

    我正在使用 Aurelia 的自定义元素重复一组条目 这是示例要点 https gist run id 38aee85444712 2f021bc05e1e0de25ae https gist run id 38aee854447122f0
  • Webpack 在输出中禁用图像名称的散列

    构建我的 Angular 4 应用程序后 Webpack 将我的图像名称更改为bg node new png to bg node new 3746bc3ac9b1bf77d2aff2c2df901a48 png 我的 webpack co
  • TFS 2013:如何将变更集注释放入文本文件中?

    我想将所有变更集注释放入一个简单的文本文件中 以自动生成变更日志 我尝试通过在 SQL 中查询 TFS 表来做到这一点 但它是一个未记录的黑匣子 我读了一篇文章来运行这样的东西 tf history r 我获得了最新的 TFS 2013 电
  • 当Python请求库遇到重试限制时如何访问服务器响应

    我正在使用 Python requests 库来实现重试逻辑 这是我为重现我遇到的问题而制作的一个简单脚本 在重试次数用完的情况下 我希望能够记录来自服务器的至少一个响应以帮助调试 但是 我不清楚如何访问该信息 当然 我可以以其他方式实现重