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
猜你喜欢
- clipboardData 对象提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用。成员表方法 描述 clearData 通过 dat
- concat()是将tensor沿着指定维度连接起来。其中tensorflow1.3版中是这样定义的:concat(values,axis,
- 越简单越丰富——极简网页设计视觉呈现技巧如何让杂乱又咄咄逼人的网页变得轻薄简洁而美观,又需保留完整功能、同时很好的区分出重点模块?这往往是让
- 一、说明早上看到Python使用pickle进行序列化和反序列化,然后发现面临的一个获取不到返回值的框架,似乎可以通过在框架中先序列化,然后
- 将Excel中的数据导入到Access中,前提是在Access中的表已经建好。 dim conn dim co
- 前提:安装xhtml2pdf https://pypi.python.org/pypi/xhtml2pdf/下载字体:微软雅黑;待转换的文件
- 听说安全地断开Connection连接的记录集可以提高ASP的运行速度,请问如何实现?很多人会将一个Connection对象存储在Appli
- 理论Python中不存在真正的私有方法。为了实现类似于c++中私有方法,可以在类的方法或属性前加一个“_”单下划线,意味着该方法或属性不应该
- 前言:在Python里面,只要类型对象实现了__iter__,那么它的实例对象就被称为可迭代对象(Iterable),比如字符串、元组、列表
- 今天遇到一个需要用javascript将url中的某些参数替换的需求,想起了不久前从网上淘到了一个parseUrl函数,正好可以借此实现,代
- python使用utf8编码,mysql也是utf8编码,是什么问题?后来查了一下,使用一个简单的办法即可:vsql = "ins
- 上一讲完成了基本博客的配置和项目工程的生成。这次开始将博客一些基本的操作主要是数据库方面学习。1.设计博客数据库表结构博客最主要的功能就是展
- 不知道有多少人是被这个头图骗进来的:)事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八
- 比如下面一个listbinfo = ['lao','wang','python']我们通过h
- alleen 问:下面是我制作的一菜单效果,现在的问题是当我只点击一级菜单A一次的时候,一级菜单A的背景色由绿色变成了黄色,再点击一级菜单B
- 正好最近的域名备案通过了,兴起就突然想做一个网页,虽然之前去备案域名也是有这个目的。问过几个人,说用linux上用PHP搭建网站很简单,就试
- 这个javascript划词搜索功能,在很多地方我们都会看到,特别是装了浏览器插件的时候,当我们用鼠标选择一段文字的时候,就会出现搜索提示,
- 给每一个onClick再附加一个事件 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HT
- 导言很多Web程序都支持用户帐号,根据不同的登录用户提供不同的选项,报表等功能。例如,就我们的教程中,我们要允许供应商公司的一些账户能登录网
- 前言突然想起来之前讲SQL注入时忘记讲一下这个宽字节注入了,因为这个知识点还是挺重要的,所以本文就带大家了解一下宽字节注入的原理以及应用方法