gpt4 book ai didi

由于某种原因,Python 请求库帖子被 Django 解释为 GET

转载 作者:行者123 更新时间:2023-12-01 07:35:50 25 4
gpt4 key购买 nike

我正在尝试向我们应用程序的 api 发出发布请求以进行一些回归测试,但由于某种原因,当我通过 requests 发出这样的请求时,它会被记录并解释为 GET 请求。

代码:

requests.post({HTTP_PROTOCOL}://{APP_URL}/api/route/',
headers={'Authorization': 'Bearer ' + access_token},
json=DATA)

日志:

[Thu Jul 11 19:17:30 2019] GET /api/route/ => generated 2 bytes in 64 msecs (HTTP/1.1 200) 5 headers in 162 bytes (1 switches on core 1)

但是,当我通过 Postman 发出请求时,请求工作完全正常,并以 JSON 格式返回创建的对象,并且在日志中将其记录为 POST。

后端目前是用 Django 编写的,使用 Django Rest Framework 来实现 REST API。这是我们的 urls.py 文件中的路线:

url(r"^api/route/$", DataListView.as_view())

我知道 DataListView 可以工作,因为 Postman 可以很好地使用它。

我也遇到过类似的问题,它不起作用,因为我发布到的路线没有斜线,但这里的情况并非如此。我知道我正在发布带有尾部斜杠的路线,正如您自己所看到的。

问题:如何让它发挥作用?为什么它可以在 Postman 中工作,但不能使用 requests 库?

编辑1:这是请求中的 header (如果提供任何线索):

{
'User-Agent': 'python-requests/2.22.0',
'Accept-Encoding': 'gzip, deflate',
'Accept': '*/*',
'Connection': 'keep-alive',
'Authorization': 'Bearer <access-token>'
}

编辑2:我刚刚这样做了:

print(resp.request.method)

它打印出GET...不知道为什么。当我这样做时,我的本地服务器打印出了POST。这是否与我发布到 https:// 网址有关?这太奇怪了。

来自this ,看起来可能是 301 或 302 重定向导致了此问题。

最佳答案

我最终按照 @IanStapletonCordasco 在我链接到的问题中建议的调试方式进行操作,并发现我的 HTTP_PROTOCOL 被设置为 "http" 而不是 “https”,这将导致 nginx 的代理重定向,将 POST 更改为 GET。我在设置该变量的配置文件中更改了它,并且它起作用了。

还有一点需要注意,对于遇到类似问题的人,请查看您发布的网址。如果您在 Django 中打开了严格的尾随斜杠检查(我很确定默认情况下是打开的),并且您发布到没有尾随斜杠的 URL,它将返回一个 30x 重定向响应,这将导致类似的事情也会发生。尝试添加斜杠,它应该可以工作。

关于由于某种原因,Python 请求库帖子被 Django 解释为 GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56996346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com