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

Dax*_*Dax 8 python python-requests

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

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

我不想把它作为一个bug记录在GitHub上,除非我确定它是一个.只想要一些输入.

谢谢

bru*_*ers 7

根据RFC,

如果收到302状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件.

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

所以这种行为至少不符合 - 但RFC也说明:

注意:RFC 1945和RFC 2068指定不允许客户端更改重定向请求的方法.但是,大多数现有的用户代理实现将302视为303响应,对Location字段值执行GET,而不管原始请求方法如何.已经为希望明确清楚客户端期望哪种反应的服务器添加了状态代码303和307.

督察:虽然不符合RFC,这是大多数用户代理的默认行为,大多数Web应用程序确实实现了302,而不是303重定向后得到的.

所以requests这里的行为显然不是一个错误,而是一个实际的设计决策.而且,正如Foo Bar User已经建议的那样,你可以使用allow_redirectsarg 来改变它.