Python接口自动化之浅析requests模块post请求

 更新时间:2021年08月24日 17:09:57   作者:软件测试自动化测试  
这篇文章Python接口自动化之浅析requests模块post请求,以下主要介绍requests模块中的post请求的使用,post源码,data、json参数应用场景及实战

在上一篇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 json
data = {
    "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
# 请求url
url = "http://127.0.0.1:8000/user/login"
# 请求参数
payload = {
    "mobilephone":"1530272****",
    "pwd":"123456"
}
# form表单形式,参数用data
res = 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形式,参数用json
res = requests.post(url,json=payload,headers=headers)
print(res.text)

响应结果为:

无响应???

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

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

import requests
payload = {"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 requests
import json
payload = {"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参数应用场景及实战。接口使用的本地服务,如果大家想练手,可以使用公司项目或网上项目自行实战,希望大家以后多多支持脚本之家!

相关文章

  • 用Python实现斐波那契(Fibonacci)函数

    用Python实现斐波那契(Fibonacci)函数

    这篇文章主要介绍了用Python实现斐波那契(Fibonacci)函数的相关资料,需要的朋友可以参考下
    2016-03-03
  • Python调用Pandas实现Excel读取

    Python调用Pandas实现Excel读取

    这篇文章主要为大家介绍了在Python中如何调用Pandas实现Excel文件的读取,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-04-04
  • Python获取DLL和EXE文件版本号的方法

    Python获取DLL和EXE文件版本号的方法

    这篇文章主要介绍了Python获取DLL和EXE文件版本号的方法,实例分析了Python获取系统文件信息的技巧,需要的朋友可以参考下
    2015-03-03
  • python实现去除下载电影和电视剧文件名中的多余字符的方法

    python实现去除下载电影和电视剧文件名中的多余字符的方法

    这篇文章主要介绍了python实现去除下载电影和电视剧文件名中的多余字符的方法,可以批量修改视频文件名称,非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • 使用python绘制cdf的多种实现方法

    使用python绘制cdf的多种实现方法

    今天小编就为大家分享一篇使用python绘制cdf的多种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 在python中路径含有空格的问题及解决

    在python中路径含有空格的问题及解决

    这篇文章主要介绍了在python中路径含有空格的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python OpenCV实现基本图形绘制

    Python OpenCV实现基本图形绘制

    这篇文章主要介绍了Python OpenCV实现基本图形绘制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python 名称空间与作用域详情

    python 名称空间与作用域详情

    这篇文章主要介绍了python 名称空间与作用域详情,函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况。

    2021-10-10
  • numpy中的converters和usecols用法详解

    numpy中的converters和usecols用法详解

    本文主要介绍了numpy中的converters和usecols用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • python切片作为占位符使用实例讲解

    python切片作为占位符使用实例讲解

    在本篇内容里小编给大家分享的是一篇关于python切片作为占位符使用实例讲解内容,有兴趣的朋友们可以学习参考下。
    2021-02-02

最新评论