【发布时间】:2020-04-17 13:48:45
【问题描述】:
使用以下代码,服务器以 301 重定向响应,但客户端将 POST 更改为 GET,这是无用的行为,因为 GET 端点不存在。使用 CURL -L -X POST 可以正常工作。使用 python2 和 python3 以及在多个版本的 Raspbian 上,此行为是相同的。
>>> import requests
>>> url = "https://registry.micronets.in/mud/v1/register-
device/DAWG/AgoNDQcDDgg/aabbccddeeffgg"
>>> response = requests.post(url)
>>> response
<Response [404]>
# Server Log: (Note - both endpoints, are on the same server using virtual hosts)
redirecting to: https://hotdawg.micronets.in/registry/devices/register- device/AgoNDQcDDgg/aabbccddeeffgg
POST /registry/v1/register-device/DAWG/AgoNDQcDDgg/aabbccddeeffgg 301 16.563 ms - 122
{
"status": 404
}
GET /vendors//register-device/AgoNDQcDDgg/aabbccddeeffgg 404 0.604 ms - 14
# CURL version (succeeds)
curl -L -X POST "https://registry.micronets.in/mud/v1/register-
device/DAWG/AgoNDQcDDgg/aabbccddeeffgg"
Device registered (insert): {
"model": "AgoNDQcDDgg",
"pubkey": "aabbccddeeffgg",
"timestamp": "2019-12-27 15:44:14 UTC",
"_id": "HBlQzXfBnoB3N4fN"
}
# Server Log: (from CURL)
redirecting to: https://hotdawg.micronets.in/registry/devices/register-
device/AgoNDQcDDgg/aabbccddeeffgg
POST /registry/v1/register-device/DAWG/AgoNDQcDDgg/aabbccddeeffgg 301 0.364 ms - 122
POST /vendors//register-device/AgoNDQcDDgg/aabbccddeeffgg 200 1.745 ms - 157
【问题讨论】:
-
您是否尝试过在您的
POST请求中将allow_redirects标志用于True -
(我怀疑问题是重定向到另一个域(实际上是一个子域)。我推测如果重定向到同一域上的不同端点,POST 重定向会成功)。如前所述,两个端点都在同一个物理服务器上,使用 nginx 中的虚拟主机进行映射。所以两个端点的IP地址是一样的
-
aws_appentice 我会尝试,但我读到这是除了 HEAD 请求之外的默认行为。是的,刚试过,同样的行为
-
@αԋɱҽԃαмєяιcαη 如果服务器配置不正确,那么为什么
curl -L -X POST可以正常工作? -
@αԋɱҽԃαмєяιcαη 来自服务器的 301 重定向仅指定 URL,而不是方法。该方法由客户端在重定向时选择
标签: python redirect post python-requests