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

作者:liyinchi1988 时间:2022-10-10 04:25:45 

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 = "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

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

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

# 字典
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/u013302168/article/details/125156299

标签:Python,requests.pos,data,json
0
投稿

猜你喜欢

  • Go事务中止时是否真的结束事务解析

    2023-07-07 11:35:35
  • python验证多组数据之间有无显著差异

    2021-03-12 15:37:22
  • php将textarea数据提交到mysql出现很多空格的解决方法

    2023-09-11 01:10:08
  • 5招优化MySQL插入方法

    2009-04-02 10:49:00
  • Python2/3中urllib库的一些常见用法

    2023-11-05 00:24:04
  • 利用后缀表达式(逆波兰式)算24点的JavaScript版算法

    2010-01-23 10:57:00
  • CSS的书写顺序规范

    2008-06-12 13:51:00
  • Python编程pytorch深度卷积神经网络AlexNet详解

    2022-02-18 10:28:40
  • python如何正确使用yield

    2023-09-29 16:57:05
  • golang使用map支持高并发的方法(1000万次操作14ms)

    2024-05-13 10:41:33
  • Python ldap实现登录实例代码

    2021-03-12 21:38:55
  • js 遍历json返回的map内容示例代码

    2024-04-16 10:32:32
  • Python文件夹批处理操作代码实例

    2022-12-15 12:58:55
  • Iinternet Explorer浏览器简介(IE)

    2009-02-05 20:59:00
  • Python中使用asyncio 封装文件读写

    2022-11-13 03:18:12
  • python使用chardet判断字符串编码的方法

    2023-02-02 06:45:20
  • python中Tkinter 窗口之输入框和文本框的实现

    2023-02-17 06:11:33
  • Python3实现取图片中特定的像素替换指定的颜色示例

    2022-08-31 15:33:21
  • Python实现的多项式拟合功能示例【基于matplotlib】

    2022-02-18 14:44:08
  • PHP hex2bin()函数用法讲解

    2023-06-06 18:51:35
  • asp之家 网络编程 m.aspxhome.com