让请求在 curl 中工作,但不在 Python 中

Posted

技术标签:

【中文标题】让请求在 curl 中工作,但不在 Python 中【英文标题】:Put request working in curl, but not in Python 【发布时间】:2018-06-04 05:38:30 【问题描述】:

我正在尝试使用 curl 制作一个“放置”方法,一切正常,我得到了 JSON:

curl -X PUT -d '["foo":"more_foo"]' http://ip:6001/whatever?api_key=whatever

但由于某种原因,使用 python requests 模块时如下:

import requests
url = 'http://ip:6001/whatever?api_key=whatever'

a = requests.put(url, data="foo":"more_foo")

print(a.text)
print(a.status_code)

我收到以下错误:

500 内部服务器错误

内部服务器错误

服务器遇到内部错误,无法完成您的请求。要么是服务器超载,要么是应用程序出错。

注意:服务器已启动并正在运行。

【问题讨论】:

您的示例之间的数据结构不同。另请注意,您可以在 requests 中以不同方式传递 URL 查询参数,而不是在 URL 字符串中:docs.python-requests.org/en/master/user/quickstart/…。 是的,我知道数据结构,但是如果我把它们放在 curl 中的确切位置,请求就会失败。感谢您提供查询参数,但我假设即使我通过了它们,它的行为仍然会像这样。 你说的“失败”是什么意思?当前的也失败了,所以我认为它有所不同?给minimal reproducible example。 您是否尝试将数据作为 JSON 传递? 【参考方案1】:

数据应该被转储:

a = requests.put(url, data=json.dumps(["foo":"more_foo"]))

或者您可以使用json 键代替data

a = requests.post(url, json=["foo":"more_foo"])

【讨论】:

感谢您首次编辑我的帖子并为我提供了缺失的部分:) 是的,确实如此 :) 我也投了赞成票,如果您需要更多内容,请告诉我。 您能否接受答案,让用户知道它可以解决问题! 或者您可以使用json=[...] 传递json 有效负载,这可能并不奇怪。你不需要自己序列化它。 这里的解决方案将请求从 PUT 更改为 POST 是否重要?

以上是关于让请求在 curl 中工作,但不在 Python 中的主要内容,如果未能解决你的问题,请参考以下文章

无法让 cURL 或 file_get_contents 在 PHP 中工作

Python plotly 在命令行中工作,但不在 python 文件中 - 导入错误

需要帮助我的 android 应用程序(http 请求)在模拟器中工作,但不在物理 Galaxy S5 上

python在调试模式下在c ++中工作,但不在exe文件中

PHP Curl 请求不起作用,但在 POSTMAN 中工作正常

import pyttsx在python 2.7中工作,但不在python3中