脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - requests.post()方法中data和json参数的使用

requests.post()方法中data和json参数的使用

2022-09-25 11:42sunny_happy08 Python

这篇文章主要介绍了requests.post()方法中data和json参数的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

requests.post()中data和json参数

json和dict

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

?
1
2
3
import json 
<json> = json.dumps(<dict>)
<dict> = json.loads(<json>)

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

?
1
2
3
>>> j = json.dumps(<dict>)
>>> type(j)
<class 'str'>

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> 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格式的报文,因此传入的报文对象也应该是格式的;这里有两种方法进行报文提交:

?
1
2
3
4
5
6
7
8
9
10
11
import requests
import json 
url = "http://example.com"
data = {
    'a': 1,
    'b': 2,
}
# 1
requests.post(url, data=json.dumps(data))
# 2-json参数会自动将字典类型的对象转换为json格式
requests.post(url, json=data)

其它

在requests.get()方法中可以使用params参数来构建url

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

post请求中json和data的区别

post请求中,可以使用data传递参数,也可以使用json传递参数

那么这两种方式有什么区别呢?

如果参数为JSON数据,可以直接传入json参数,它将自动编码并将Content-Type的置为application/json

?
1
2
3
payload = {'key1': 'value1', 'key2': 'value2'
r = requests.post("https://httpbin.org/post", json=payload)
print(r.text)

如果data传递的参数为字符串,例如【json.dumps(payload)】,则request对参数进行url编码,Content-Type的值为None,所以data传字符串时,一定要在header中指定Content-Type

?
1
2
3
4
payload = {'key1': 'value1', 'key2': 'value2'}
headers={"Content-Type": "application/json"}
r = requests.post("https://httpbin.org/post", headers=headers,data=json.dumps(payload))
print(r.text)

如果data传递的是字典、元组组成的列表或列表作为值的字典,则request对参数进行url编码,Content-Type的值为application/x-www-form-urlencoded

?
1
2
3
4
5
6
7
8
9
# 字典
payload1 = {'key1': 'value1', 'key2': 'value2'}  
r = requests.post("https://httpbin.org/post", data=payload1)
# 元组组成的列表
payload2 = [('key1', 'value1'), ('key1', 'value2')]  
r = requests.post("https://httpbin.org/post", data=payload2)
# 列表作为值的字典
payload3 = {'key1': ['value1', 'value2']}  
r = requests.post("https://httpbin.org/post", data=payload3)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/sunny_happy08/article/details/83447426

延伸 · 阅读

精彩推荐
  • Python使用selenium+chromedriver+xpath爬取动态加载信息

    使用selenium+chromedriver+xpath爬取动态加载信息

    这篇文章主要介绍了使用selenium+chromedriver+xpath爬取动态加载信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    Bruce_Liuxiaowei6212022-09-20
  • Python浅谈Python 函数式编程

    浅谈Python 函数式编程

    这篇文章主要介绍了Python 函数式编程的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    认真对待世界的小白3012020-06-21
  • Python初步剖析C语言编程中的结构体

    初步剖析C语言编程中的结构体

    这篇文章主要介绍了C语言编程中的结构体,是C语言入门学习中的基础知识,需要的朋友可以参考下...

    xiaoyao38574002020-08-06
  • Python如何用python写一个简单的词法分析器

    如何用python写一个简单的词法分析器

    这篇文章主要介绍了如何用python写一个简单的词法分析器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    你就像只铁甲小宝9702021-05-03
  • Python对Python中plt的画图函数详解

    对Python中plt的画图函数详解

    今天小编就为大家分享一篇对Python中plt的画图函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    zsc2018256532021-04-16
  • Python对Python 网络设备巡检脚本的实例讲解

    对Python 网络设备巡检脚本的实例讲解

    下面小编就为大家分享一篇对Python 网络设备巡检脚本的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    唐僧没有肉6712021-02-04
  • PythonPython read函数按字节(字符)读取文件的实现

    Python read函数按字节(字符)读取文件的实现

    这篇文章主要介绍了Python read函数按字节(字符)读取文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    biancheng5682021-07-30
  • Pythonpandas取出重复数据的方法

    pandas取出重复数据的方法

    今天小编就为大家分享一篇pandas取出重复数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    到你了,弟弟4942021-08-01