python-requests 在收到 HTTP 302 时将 POST 更改为 GET。这是预期的行为吗?

2023-12-27

我在对新 API 进行一些测试后发现了这一点,并且那边的管理员说我一边做 GET,一边做 POST。启用调试后,我发现请求将执行初始 POST,然后对新的 302 URL 执行 GET。

在我了解问题所在后,我的问题现已解决,但这是错误还是预期行为?如果您在 POST 上收到 302,则不应引发异常,或者重试对新 URL 的 POST。

我不想将其作为 bug 记录在 GitHub 上,除非我确定它确实是 bug。只是想对此提供一些意见。

Thanks


根据 RFC 的规定,

如果收到 302 状态代码是为了响应除 GET 或 HEAD,用户代理不得自动重定向 请求,除非它可以被用户确认,因为这可能 更改发出请求的条件。

(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.3)

所以这种行为至少是不合规的 - 但 RFC 还指出:

注意:RFC 1945和RFC 2068指定不允许客户端 更改重定向请求的方法。然而,大多数 现有的用户代理实现将 302 视为 303 响应,对位置字段值执行 GET,不管 原始请求方法。状态码 303 和 307 有 已为希望明确表明哪些服务器添加 预期客户会有什么样的反应。

IOW:虽然不符合 RFC 标准,但这是大多数用户代理的默认行为,并且大多数 Web 应用程序确实使用 302 而不是 303 实现 post-redirect-get。

So requests这里的行为显然不是一个错误,而是一个实际的设计决策。正如 Foo Bar User 已经提到的,您可以使用allow_redirects arg.

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

python-requests 在收到 HTTP 302 时将 POST 更改为 GET。这是预期的行为吗? 的相关文章

随机推荐

  • 类型错误:db.collection 不是函数,无法获取

    我正在尝试从中获取一些数据apiRoutes get resources productinfo name 我有这个错误 我不知道出了什么问题 还有apiRoutes get book title 似乎不起作用 我不知道我做错了什么 更新
  • CommandManager.RequerySuggested 如何工作?

    MSDN 仅指出 当 CommandManager 检测到可能改变命令执行能力的条件时发生 然而我似乎找不到任何关于它是如何工作的痕迹 我应该知道 避免什么等等 它只是监听输入吗 即 鼠标移动 按下按键等 我无法准确告诉你发生了什么事件Co
  • 添加到自定义 ActionLink 帮助程序扩展的 htmlAttributes

    我正在尝试创建 Html ActionLink HtmlHelper 的简单自定义版本 我想将一组额外的属性附加到传入的 htmlAttributes 匿名对象中 public static MvcHtmlString NoFollowAc
  • 选择中的 VBA Rows.Count

    我正在计算用户选择在操作按钮旁边的工作表顶部显示的行数 即按钮显示 生成电子邮件 旁边显示 已选择 x 个项目 由于每次选择更改时都会更新 因此我有以下代码 Private Sub Worksheet SelectionChange ByV
  • 如何获取多语言的维基百科页面?

    我怎样才能获得另一种语言的相同维基百科页面 例如我想获得日语页面 http en wikipedia org wiki Cloud http en wikipedia org wiki Cloud 结果是 http ja wikipedia
  • 释放 Windows 文件共享锁

    这个问题在工作中时不时就会出现 我们的构建机器可以通过普通的 Windows 文件共享访问其文件 如果有人远程浏览计算机上的文件夹 并将窗口打开过夜 则构建会失败 就像现在所做的那样 左侧打开的资源管理器窗口指向源树中的子文件夹之一 构建会
  • Rails 3 从另一个控制器渲染部分内容(错误:ActionView::MissingTemplate)

    我试图在 application html erb 的标头中包含登录名 用户名 密码 我收到此错误 Missing partial login with handlers gt rjs builder rhtml erb rxml loca
  • kafka-console-consumer 使用什么消费组

    当我像这样运行 kafka console consumer 时 bin kafka console consumer sh bootstrap server localhost 9092 topic test 它默认属于哪个消费群体 如果
  • SQL 获取未参与项目的姓名

    我想检索未参与 PostgreSQL 项目的人员姓名 我有一张名为employees和他们的names and ssn 我的第二张桌子叫做works on并包括ssn and project number ssn这里有一个foreign k
  • Python 'sys.argv' 的最大参数数量有限制吗?

    我有一个Python脚本需要处理大量文件 为了解决 Linux 对可传递给命令的参数数量相对较小的限制 我使用find print0 with xargs 0 我知道另一种选择是使用 Python 的 glob 模块 但是当我有更高级的模块
  • 在 Android 中使用 Retrofit 时带有动态键的 JSON

    我是新使用的Retrofit与安卓 我陷入了向REST Api并且响应有一个动态键 谁能告诉我解析的最佳方法是什么JSON像这样的东西 Meta Data 1 Information Intraday 1min prices and vol
  • 对 Access 中的(隐藏)系统表运行 C# 查询?

    我正在尝试使用 C 对 Access 2007 数据库运行以下查询 OleDbCommand command new OleDbCommand command Connection connect command CommandText S
  • 没有数据源时如何给出“Empty ListView Message”

    我的应用程序有一个带有 GridLayout 的 ListView 我现在尝试将 ListView 组引入我的应用程序 比如说 数据源通常有 Group1 Group2 和 Group3 我想一直显示所有 3 个组 无论其中是否有元素 当组
  • Julia 的 numpy.einsum 吗? (2)

    从此而来question https stackoverflow com questions 22521574 numpy einsum for julia 我想知道是否可能有更广义的 einsum 让我们假设 我遇到了问题 using P
  • 为什么需要在菱形层次结构的中间指定虚拟继承?

    我有钻石级的类 A B C D 为了避免 D 中存在 A 的两个副本 我们需要在 B 和 C 处使用虚拟继承 class A class B virtual public A class C virtual public A class D
  • Java 网络开发 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望开始使用 Java 进行 Web 开发 我有一些基本的 Java 知识 所以这不是问题 但当涉及到破译 Web 应用程序中使用的各种
  • Django防止删除模型实例

    我有一个 models Model 子类 它代表我的 mysql 数据库上的视图 即 Managed False 然而 当运行我的单元测试时 我得到 DatabaseError 1288 DELETE 的目标表 my view table
  • CORS 不适用于 WSO2 API 管理器中的 oAuth2 UserInfo 端点

    我在使 CORS 在 oAuth2 的 UserInfo 端点上工作时遇到问题 我想通过调用 oAuth2 UserInfo 资源来检索声明 UserInfo 正如我从 stackoverflow 帖子中了解到的那样 WSO2 API 管理
  • 服务工作者抛出 net::ERR_FILE_EXISTS 错误?

    service worker js 1 GET http localhost 8080 service worker js net ERR FILE EXISTS 这是注册服务人员后每次刷新时都会出现的错误 我已确保 service wor
  • python-requests 在收到 HTTP 302 时将 POST 更改为 GET。这是预期的行为吗?

    我在对新 API 进行一些测试后发现了这一点 并且那边的管理员说我一边做 GET 一边做 POST 启用调试后 我发现请求将执行初始 POST 然后对新的 302 URL 执行 GET 在我了解问题所在后 我的问题现已解决 但这是错误还是预