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_dtrue>>> js = js_dtrue>>> string == jsfal>>> 控辍保学简报string"{'a': 1, 'b': 2}">>> js'{"a": 1, "b": 2}'
可以看出来string和js的区别在于引号。对于可以作为json.loads(<str>)参数对象的字符串,除了要满足字典类型的格式外,所有的字符串赠从弟其二对象必须是双引号。
在通过requests.post()进行post请求时,传入报文的参数有两个,一个是data,一个是json。
常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;
而在最新爬虫的过程中遇到了一种payload报文,是一种json格式的报文,因此传入的报文对象也应该是格式的;这里有两种方法进行报文提交:
import requestsimport jsonurl = "http://example.com"data = { 'a': 1, 'b': 2,}# 1requests.post(url, data=json.dumps(data))# 2-json参数会自动将字典类型的对象转换为json格式requests.post(url, json=data)
在requests.get()方法中可以使用pa2020开学第一课观后感rams参数来构建url
有时候请求得到的结果可能呈现乱码的状态,可以通过resp.encoding属性查看网页编码方式,同时可以在获取resp.text之前对resp.encoding=’utf-8’赋值,这情商测试题样再次获取的resp.text则会使用我们要求的编码方式。
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)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-05 00:38:42,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ce7b19df3c68ef095b0257013feffe5e.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:requests.post()方法中data和json参数的使用.doc
本文 PDF 下载地址:requests.post()方法中data和json参数的使用.pdf
留言与评论(共有 0 条评论) |