002、 requests.post() 用 data 还是 json 参数 ?

参考资料:https://www.cnblogs.com/yoyoketang/p/7231384.html

       https://blog.csdn.net/liudinglong1989/article/details/104604626

一、requests.post() 用 data 还是 json参数 ??

概述:

1、首先要用浏览器 F12 功能,确认本次请求头Content-Type 默认值 是 application/x-www-form-urlencoded 还是 application/json ;
2、如果是 application/x-www-form-urlencoded,  r = requests.post(url, data=字典 )  是成功的 ;
3、如果是 application/json :
  a、r = requests.post(url, data=json.dumps(字典)) ;——是成功的;(如果你传递一个 string 而不是一个 dict,那么数据会被直接发布出去。)
  b、r = requests.post(url, json=字典) ;——是成功的;关键字参数json的功能:会自动把字典转换成string;

 

 

加深理解的截图:

 

 

 

 

网友总结如下:

1、json后面只能赋值是字典类型的
2、data后面能赋值字典类型(不传headers)
3、data后面能赋值json类型的(需要headers是"Content-Type": "application/json;charset=UTF-8")

对于requests的post请求参数有data,json,这两种的区别是如果不指定headers,
json默认headers是application/json,data默认是表单提交headers是application/x-www-form-urlencoded

 

演示代码如下:

# -*- coding: utf-8 -*-
import json

import requests

# 接口地址
login_url = "https://openapiv5.ketangpai.com/UserApi/login"

# 请求头
json_headers = {"Content-Type": "application/json; charset=UTF-8"}
form_headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}

# 请求数据,密码请自己注册。
data_dict = {
  "email": "153****6232",
  "password": "nmb153****6232",
  "remember": "0"
}

print('\n============= 第一种情况 ==============\n')
# 第一种情况:Content-Type 没有设置,用data传字典
resp = requests.post(login_url, data=data_dict)     # 请求成功
print(resp.request.headers)   # 'Content-Type': 'application/x-www-form-urlencoded'
print(resp.json())


print('\n============= 第二种情况 ==============\n')
# 第二种情况:Content-Type 没有设置,用json传字典
resp = requests.post(login_url, json=data_dict)     # 请求成功
print(resp.request.headers)   # 'Content-Type': 'application/json'
print(resp.json())


print('\n============= 第三种情况 ==============\n')
# 第三种情况:设置请求头 'Content-Type': 'application/json',用data传字典
resp = requests.post(login_url, data=data_dict, headers=json_headers)   # 请求失败, 如果改成:json=data_dict 或者 data=json.dumps(data_dict) ,请求成功。
print(resp.request.headers)   # 'Content-Type': 'application/json; charset=UTF-8'
print(resp.json())


print('\n============= 第四种情况 ==============\n')
# 第四种情况:设置请求头 'Content-Type': 'application/x-www-form-urlencoded',用json传字典
resp = requests.post(login_url, json=data_dict, headers=form_headers)     # 请求成功; 如果改成:data=data_dict,请求成功。
print(resp.request.headers)   # 'Content-Type': 'application/x-www-form-urlencoded
print(resp.json())

执行结果如下:

D:\SkyWorkSpace\WorkSpace\API_test\lm\ch_04\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/API_test/lm/ch_04/demo_1.py

============= 第一种情况 ==============

{'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '52', 'Content-Type': 'application/x-www-form-urlencoded'}
{'status': 1, 'code': 10000, 'message': '访问成功', 'data': {'url': '', 'token': 'ee32283b71dfd6e5995281754fe82544a095a95de865f17ee354e1491176af70', 'isenterprise': 0, 'uid': 'MDAwMDAwMDAwMLSsudyHqb9qhMtyoQ'}}

============= 第二种情况 ==============

{'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '71', 'Content-Type': 'application/json'}
{'status': 1, 'code': 10000, 'message': '访问成功', 'data': {'url': '', 'token': 'ee32283b71dfd6e5995281754fe82544a095a95de865f17ee354e1491176af70', 'isenterprise': 0, 'uid': 'MDAwMDAwMDAwMLSsudyHqb9qhMtyoQ'}}

============= 第三种情况 ==============

{'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json; charset=UTF-8', 'Content-Length': '52'}
{'status': 0, 'code': 30501, 'message': '用户名不能为空', 'data': {}}

============= 第四种情况 ==============

{'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Content-Length': '71'}
{'status': 1, 'code': 10000, 'message': '访问成功', 'data': {'url': '', 'token': 'ee32283b71dfd6e5995281754fe82544a095a95de865f17ee354e1491176af70', 'isenterprise': 0, 'uid': 'MDAwMDAwMDAwMLSsudyHqb9qhMtyoQ'}}

Process finished with exit code 0

 

posted @ 2021-08-31 13:04  空-山-新-雨  阅读(315)  评论(0编辑  收藏  举报