Requests库分享系列:
Requests库(十三)利用钉钉机器人打造一个钉钉群定时推送今日头条24小时热闻
Requests库(十五)一文解决解析text/html格式返回数据
Requests库(十六)一文展示如何利用Requests请求xml格式接口
Requests库(十七)一文展示如何利用Requests发送form表单请求
Requests库(十八)Requests发送application/x-www-form-urlencoded请求
前言
更正一个错误,在上一次分享的Requests库(十八)复杂json解析,应该为第19篇笔误。本篇是第二十篇。
本次分享源于在微信群里有人问的一个问题,为什么在requests请求的时候,参数中有一个json的字段,传入dict就可以正常,传入json dumps后的数据请求就报错。这是为啥呢,我在群里已经做过了,分享,这里我在讲解下当时我的思路。
原因出现在哪里
首先来说,按照我们的习惯的来说的话,有json参数,就应该传入json的字符串,但是我们传入json的字符串就请求发送后了,预期不是我们想要的,但是我们传入dict 结果就是正确的,按说,不应该啊,那么这是为啥呢,看到这里,我的想法就是是不是内部做了什么处理呢,于是乎开始查找问题的根本。
首先呢,我点击post方法,用command+左键。进入
这里就直接返回了。然后我们去看下request的方法是什么。
这个方法里呢,是调用了session的requests,那么我们看看这里面是实现了什么。
然后里面的方法如下
我们可以看到参数是在这里对应的,然后传入给prepare_request
那么我们继续看看prepare_request实现了什么?
参数最后给了
PreparedRequest的prepare方法,那么这里面做了什么呢我们接下来去探究下,
还是command进去。
我们在这里可以看到,所有的最后都给了prepare_body的方法,我们看下这个方法实现了什么,过来之后,我们看到了如下的方法。
json最后调用complexjson的dumps,那么这里应该就是了json这给处理,
这里就是把json内部封装给解决了处理了dict,内部直接转换成json,所以你只需要传入dict即可。特别方便把。
问题的答案就是在这里,内部给你处理好了,当初我在群里也是这么回复的,其实问题很简单,查看里面的代码怎么实现的就知道了。里面的代码很简单,也很好找,顺着思路找下去即可。
写在最后
问题的原因其实很简单,不复杂,问题的答案其实就隐藏在源码中,可能你不知道为啥,但是你要去看就能知道里面的原因,一些问题不复杂,只要你去解决。