python使用curl-d命令的等效请求是什么



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

curl命令看起来像

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

通过CURL请求,服务器(python(以类似以下的requeset.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来说是新的,所以我错过了这个,谢谢

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

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

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

最新更新