让请求在 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文件中