Python requests发送POST请求传递JSON参数的正确方式
本文解决Python中使用requests库发送POST请求时,直接传递json.dumps转换后的字典导致服务端接收异常的问题。通过对比Ruby RestClient的行为,指出需在请求头中显式指定Content-Type为application/json,并配合data参数传递序列化后的字符串,从而确保服务端正确解析JSON数据。
Python POST请求传递JSON参数的问题现象
在开发过程中,曾遇到一个令人困惑的现象:当需要在Python中传递字典类型的参数时,尝试使用json.dumps将字典转换为JSON字符串,并通过post方法发起请求,但结果并不符合预期。
params = {"score":{"gt":"80", "lt":"90"}}
request.post(url, json.dumps(params))然而,查看服务端接收到的参数日志,发现数据格式出现了偏差,并非预期的JSON结构。
Parameters: {"sno"=>"lt"}相比之下,之前使用Ruby语言的RestClient gem包传递相同参数时,处理逻辑和结果均正常。
params = {"score":{"gt":"80", "lt":"90"}}
RestClient.post(url, params.to_json, :content_type => :json)服务端对于Ruby RestClient请求的日志记录显示,参数被正确解析为预期的JSON对象格式。
Parameters: {"score"=>{"gt"=>"80", "lt"=>"90"}}问题根源分析与解决方案
经过仔细对比分析,发现RestClient在发送请求时,其第三个参数用于指定header信息。

查阅相关资料后得知,在Python的requests库中发送POST请求时,必须通过header参数明确指明所传递数据的格式为JSON。具体做法是设置Content-Type为application/json,并将json.dumps转换后的字符串作为data参数传入,代码如下:
requests.post(url, data=json.dumps(params), headers={'Content-Type': 'application/json'})按照上述方式调整后,服务端即可正常接收到并解析传过来的JSON参数。
总结
以上就是关于在Python中使用requests库发送POST请求并正确传递JSON参数的解决方案。如需了解更多相关内容,可搜索本站历史文章或浏览后续更新,感谢支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













