您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python接口自动化之浅析requests模块post请求

51自学网 2021-10-30 22:18:45
  python
这篇教程Python接口自动化之浅析requests模块post请求写得很实用,希望能帮到您。

在上一篇Python接口自动化测试系列文章:Python接口自动化之浅析requests模块get请求,介绍了requests模块、get请求及响应结果详解。接下来介绍requests模块中的post请求的使用。

一、源码解析

def post(url, data=None, json=None, **kwargs):    r"""Sends a POST request.    :param url: URL for the new :class:`Request` object.    :param data: (optional) Dictionary, list of tuples, bytes, or file-like        object to send in the body of the :class:`Request`.    :param json: (optional) json data to send in the body of the :class:`Request`.    :param /*/*kwargs: Optional arguments that ``request`` takes.    :return: :class:`Response <Response>` object    :rtype: requests.Response    """     return request('post', url, data=data, json=json, **kwargs)

post请求参数解析:

url: 请求的url,必填;

data: 选填,请求参数;

json: 选填,请求参数;

kwargs:选填,可以传入headers、cookies等。

二、data、json区别

小伙伴们看完可能有点懵逼,data和json有啥区别呀,什么时候传入data,什么时候传入json。

举个栗子:

data = {    "name":"vivi"}print(type(data))

聪明的小伙伴立即抢答了,打印的是字典类型。

那如果想把字典转换为json字符串呢,需要引用json模块。

import jsondata = {    "name":"vivi"}data = json.dumps(data)print(type(data))

敲黑板:

  • 不管json是str还是dict,如果不指定headers中的content-type,默认为application/json;
  • data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式;
  • data为str时,如果不指定content-type,默认为application/json。

重点来了,post请求参数到底是传data还是json,这时候我们要看请求头里的content-type类型(具体参照接口文档,没有接口文档的抓包)。

如果请求头中content-type为application/json, 为json形式,post请求使用json参数。

 

如果请求头中content-type为application/x-www-form-urlencoded,为表单形式,post请求时使用使用data参数。

三、form形式发送post请求

当前接口的请求类型为application/x-www-form-urlencoded。

# 导入requests模块import requests# 请求urlurl = "http://127.0.0.1:8000/user/login"# 请求参数payload = {    "mobilephone":"1530272****",    "pwd":"123456"}# form表单形式,参数用datares = requests.post(url, data=payload)print(res.text)

响应结果为:

{
    "status": 1,
    "code": "10001",
    "data": null,
    "msg": "登录成功"
}

四、json形式发送post请求

当前接口的请求类型为application/json。

# 导入requests模块import requests# 请求的url地址url = 'http://127.0.0.1:8000/user/login/'# 请求头headers = {"content-type":"application/json"}# payload 为传入的参数payload = {"username":"vivi","password":"123456","remember_me":"false"}# json形式,参数用jsonres = requests.post(url,json=payload,headers=headers)print(res.text)

响应结果为:

无响应???

问题来了,如果请求类型为application/json,我偏要传入data参数呢?

先按我们正常思维走一波:

import requestspayload = {"username":"vivi","password":"123456","remember_me":"false"}header = {"content-type":"application/json"}url = 'http://127.0.0.1:8000/user/login/'res = requests.post(url,data=payload,headers=header)print(res.text)

响应结果:请求错误

{"code":400,"data":[],"message":"Input error"}

请求类型为application/json,如果想用data传参,需要将字典类型数据转换为json字符串

import requestsimport jsonpayload = {"username":"vivi","password":"123456","remember_me":"false"}header = {"content-type":"application/json"}# 字典转换为json串data = json.dumps(payload)url = 'http://127.0.0.1:8000/user/login/'res = requests.post(url,data=data,headers=header)print(res.text)

本文主要讲解post源码,data、json参数应用场景及实战。接口使用的本地服务,如果大家想练手,可以使用公司项目或网上项目自行实战。

本文主要讲解post源码,data、json参数应用场景及实战。接口使用的本地服务,如果大家想练手,可以使用公司项目或网上项目自行实战,希望大家以后多多支持51zixue.net!


Python接口自动化浅析Token应用原理
Python接口自动化之cookie、session应用详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。