requests.post()方法中的报文data参数和json参数区别

本文详细介绍了Python中字典类型与JSON格式数据之间的转换方法,包括json.dumps()和json.loads()函数的使用,以及在requests.post()方法中如何正确传递JSON格式的报文。

python中的dict类型要转换为json格式的数据需要用到json库:

import json

<json> = json.dumps(<dict>)
<dict> = json.loads(<json>)

需要注意的是python中并没有json类型这一说法,通过json.dumps()转换的字典对象,最后得到的是一个字符串对象,也就是说,在python中json格式的数据实际上就是一个字符串

>>> j = json.dumps(<dict>)
>>> type(j)
<class 'str'>

实例:

#字典转换成json格式数据,得到字符串对象(unicode),与str类型有区别

dict = {"a":1,"b":"测试"}
print(type(dict))
to_json = json.dumps(dict,ensure_ascii=False)
print(to_json)

结果:

<class 'dict'>
{"a": 1, "b": "测试"}

虽说json格式的数据在python中是以字符串的类型存在的,但是通过str()工厂函数所得到的结果同json.dumps()方法所得到的结果是不相同的

>>> d = {'a': 1, 'b': 2}
>>> d_d = {"a": 1, "b": 2}
>>> string = str(d)
>>> string_d = str(d_d)
>>> js = json.dumps(d)
>>> js_d = json.dumps(d_d)
>>> string == string_d
True
>>> js = js_d
True
>>> string == js
False
>>> string
"{'a': 1, 'b': 2}"
>>> js
'{"a": 1, "b": 2}'

可以看出来string和js的区别在于引号。对于可以作为json.loads()参数对象的字符串,除了要满足字典类型的格式外,所有的字符串对象必须是双引号。
可以得出,js格式的字符串是:单引号,而python的字符串类型数据是:双引号。

**

requests.post()

**
在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json。
常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;
而在最新爬虫的过程中遇到了一种payload报文,是一种json格式的报文,因此传入的报文对象也应该是格式的;这里有两种方法进行报文提交:

import requests
import json

url = "http://example.com"
data = {
    'a': 1,
    'b': 2,
}
# 1-data参数需要使用json.dumps将字典类型的对象转换成json格式的字符串对象
r1 = requests.post(url, data=json.dumps(data))

# 2-json参数会自动将字典类型的对象转换为json格式
r2 = requests.post(url, json=data)
print(type(data))
print(r1)
print(r2)
<class 'dict'>
<Response [200]>
<Response [200]>

其它

在requests.get()方法中可以使用params参数来构建url
有时候请求得到的结果可能呈现乱码的状态,可以通过resp.encoding属性查看网页编码方式,同时可以在获取resp.text之前对resp.encoding='utf-8’赋值,这样再次获取的resp.text则会使用我们要求的编码方式。

参考:https://www.cnblogs.com/yanlin-10/p/9820694.html
参考:https://www.jianshu.com/p/9095a27b1bf2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值