requests.post()⽅法中data和json参数的使⽤
⽬录
requests.post()中data和json参数
json和dict
requests.post()
其它
post请求中json和data的区别
requests.post()中data和json参数
json和dict
python中的dict类型要转换为json格式的数据需要⽤到json库:
import json
<json> = json.dumps(<dict>)
<dict> = json.loads(<json>)
需要注意的是python中并没有json类型这⼀说法,通过json.dumps(<dict>)转换的字典对象,最后得到的是⼀个字符串对象,也就是说,在python中json格式的数据实际上就是⼀个字符串
>>> j = json.dumps(<dict>)
>>> type(j)
<class 'str'>
虽说json格式的数据在python中是以字符串的类型存在的,但是通过str(<dict>)⼯⼚函数所得到的结果同json.dumps(<dict>)⽅法所得到的结果是不相同的
>>> 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(<str>)参数对象的字符串,除了要满⾜字典类型的格式外,所有的字符串对象必须是双引号。
requests.post()
在通过requests.post()进⾏POST请求时,传⼊报⽂的参数有两个,⼀个是data,⼀个是json。
常见的form表单可以直接使⽤data参数进⾏报⽂提交,⽽data的对象则是python中的字典类型;
⽽在最新爬⾍的过程中遇到了⼀种payload报⽂,是⼀种json格式的报⽂,因此传⼊的报⽂对象也应该是格式的;这⾥有两种⽅法进⾏报⽂提交:
import requests
import json
url = "example"
data = {
'a': 1,
'b': 2,
js获取json的key和value
}
# 1
requests.post(url, data=json.dumps(data))
# 2-json参数会⾃动将字典类型的对象转换为json格式
requests.post(url, json=data)
其它
在()⽅法中可以使⽤params参数来构建url
有时候请求得到的结果可能呈现乱码的状态,可以通过ding属性查看⽹页编码⽅式,同时可
以在获取之前对ding='utf-8'赋值,这样再次获取的则会使⽤我们要求的编码⽅式。
post请求中json和data的区别
post请求中,可以使⽤data传递参数,也可以使⽤json传递参数
那么这两种⽅式有什么区别呢?
如果参数为JSON数据,可以直接传⼊json参数,它将⾃动编码并将Content-Type的置为application/json
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("/post", json=payload)
)
如果data传递的参数为字符串,例如【json.dumps(payload)】,则request对参数进⾏url编码,Content-Type的值为None,所以data传字符串时,⼀定要在header中指定Content-Type
payload = {'key1': 'value1', 'key2': 'value2'}
headers={"Content-Type": "application/json"}
r = requests.post("/post", headers=headers,data=json.dumps(payload))
)
如果data传递的是字典、元组组成的列表或列表作为值的字典,则request对参数进⾏url编码,Content-Type的值为application/x-www-form-urlencoded
# 字典
payload1 = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("/post", data=payload1)
# 元组组成的列表
payload2 = [('key1', 'value1'), ('key1', 'value2')]
r = requests.post("/post", data=payload2)
# 列表作为值的字典
payload3 = {'key1': ['value1', 'value2']}
r = requests.post("/post", data=payload3)
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。