Python的requests.post 的data和json参数到底有什么区别?

在最近一次码字过程中,遇到一个问题,很简单的需求,通过http请求一个服务器的数据。最初始的代码如下:

param = {"fileName": name, "token": token}
resp = requests.post(url=base_url, data=param)

代码很简单,但是服务器一直提示错误,客户端收不到结果

w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

然后加上header参数,再次进行调试

headers = {
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Content-Type": "application/json",
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
    "Accept-Encoding": "gzip, deflate",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
}

param = {"fileName": name, "token": token}

resp = requests.post(url=base_url, headers=headers,data=param)

依然报错。

经过反复调试,把代码改成下面的方法就可以了

resp = requests.post(url=base_url, headers=headers,data=param)

回头想想,问题的根本解决是把requests.post 的参数 “data”改成了“json”。

那么 requests中“data”和“json”这两种形式到底有什么区别呢?

在 Python 中使用 requests 库的 post 方法,可以通过 data 参数向服务器发送数据。

如果把该参数设置为 JSON 格式的数据,则该请求会被视为一个 JSON 请求,同时请求的 Content-Type 字段也会被设置为 application/json。

与此同时,如果使用的是 requests.post(…, json=json_data) 的形式,这样的请求就会更加方便,因为它会自动设置 Content-Type 为 application/json,并将请求数据序列化为 JSON 格式。

因此,

  1. 如果需要发送 JSON 格式的数据,应该使用 requests.post(…, json=json_data) 的形式。
  2. 如果需要使用其他格式的数据,则需要使用 data 参数,使用使用 requests.post(…, data=datas) 的形式

--------------------------------知其然而知其所以然--------------------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值