python对curl d命令的等效请求是什么?

2024-09-25 10:24:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难找到与curl命令等效的python请求,curl命令将数据作为JSON发送到主体中

curl命令看起来像

curl -X POST -d '{"key1": "value1", "key2": "value2"}' http://localhost:8080/myapi

通过CURL请求,服务器(python)以如下所示的requset.form获取数据

ImmutableMultiDict([('{"key1": "value1", "key2": "value2"}', '')])

但是当发送相同的post请求时,就像使用python的请求模块一样

response = requests.post("http://localhost:8080/myapi", data=json.dumps({
    "key1": "value1", "key2": "value2"))

从服务器端,我看到的内容如下

ImmutableMultiDict([('key1', 'value1'), ('key2', 'value2')]) and its type is : <class 'werkzeug.datastructures.ImmutableMultiDict

我有点困惑,为什么请求使用requests.post在服务器端的内容与使用curl请求不同,有人能帮助理解和可能的解决方案吗


通过在curl和从请求模块发出的请求中添加“Content-Type:application/json”,问题已经解决。另外,我曾经检查request.form中的数据,但是当我使用request.data时,我意识到它是有效的,对于python来说是新的,所以我错过了这个,谢谢


Tags: 模块数据命令formlocalhosthttpcurlpost
1条回答
网友
1楼 · 发布于 2024-09-25 10:24:54

您是否尝试过只发送字典而不是字符串化json

r = requests.post('https://httpbin.org/post', data = {"key1": "value1", "key2": "value2"})

通过httpbin测试服务器运行此命令并运行curl语句会产生相同的响应(用户代理除外)

相关问题 更多 >