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

json和dict

python中的dict定制开发类型要转换为json定制开发格式的数据需要用到:

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

定制开发需要注意的是:

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

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

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

  1. >>> d = {'a': 1, 'b': 2}
  2. >>> d_d = {"a": 1, "b": 2}
  3. >>> string = str(d)
  4. >>> string_d = str(d_d)
  5. >>> js = json.dumps(d)
  6. >>> js_d = json.dumps(d_d)
  7. >>> string == string_d
  8. True
  9. >>> js = js_d
  10. True
  11. >>> string == js
  12. False
  13. >>> string
  14. "{'a': 1, 'b': 2}"
  15. >>> js
  16. '{"a": 1, "b": 2}'

可以看出string和js的区别在于引号

对于可以作为json.loads(<str>)参数对象的字符串,除了要满足字典类型的格式外,所有的字符串对象必须是双引号。

requests.post()

在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json

常见的form表单可以直接使用data参数进行报文提交,而data的对象则是python中的字典类型;

在爬虫的过程中遇到了一种报文,是一种json格式的报文,因此传入的报文对象也应该是格式的;

这里有两种方法进行报文提交:

  1. import requests
  2. import json 
  3. url = "http://example.com"
  4. data = {
  5.     'a': 1,
  6.     'b': 2,
  7. }
  8. # 1
  9. requests.post(url, data=json.dumps(data))
  10. # 2-json参数会自动将字典类型的对象转换为json格式
  11. 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. payload = {'key1': 'value1', 'key2': 'value2'
  2. r = requests.post("https://httpbin.org/post", json=payload)
  3. print(r.text)

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

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

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

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发