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

(0)

相关推荐

  • 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.

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

    一.requests模块说明 介绍 Requests是Python语言的第三方的库,专门用于发送HTTP请求. 特点 1.Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码. 2.在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作. 3.Requests会自动实现持久连接keep-alive

  • 如何理解python接口自动化之logging日志模块

    一.logging模块介绍 ​前言:我们之前运行代码时都是将日志直接输出到控制台,而实际项目中常常需要把日志存储到文件,便于查阅,如运行时间.描述信息以及错误或者异常发生时候的特定上下文信息. ​Python中自带的logging模块提供了标准的日志接口,在debug时使用往往会事半功倍.为什么不直接使用print去输出呢?这种方式对简单的脚本来说有用,对于复杂的系统来说相当于一个花瓶摆设,大量的print输出很容易被遗忘在代码里,并且print是标准输出,这很难从一堆信息里去判断哪些是你需要重

  • Python接口自动化浅析Token应用原理

    目录 一.Token基本概念及原理 1.Token作用 2.什么是Token 3.Token运行原理 4.Token认证优点 5.Token和 Cookie.Session 的选型 二.Token实战 在之前的Python接口自动化测试系列文章:Python接口自动化之cookie.session应用详解,介绍了cookie.session原理及在自动化过程中如何利用cookie.session保持会话状态. 以下介绍Token原理及在自动化中的应用. 一.Token基本概念及原理 1.Toke

  • Python接口自动化之cookie、session应用详解

    目录 一.cookie 1.cookie介绍 2.cookie原理 二.session 1.session介绍 2.session原理 1. 存储位置不同: 2. 存储容量不同: 3. 存取方式不同: 4. 隐私策略/安全性不同: 5. 有效期不同: 6. 服务器压力不同: 三.cookie和session区别 四.cookie应用 五.session应用 在上一篇Python接口自动化测试系列文章:Python接口自动化之浅析requests模块post请求,介绍了post源码,data.js

  • python接口自动化使用requests库发送http请求

    目录 前言 一.requests库 二.HTTP 请求方法 三.发送GET请求 四.发送POST请求 五.获取响应数据 六.高级操作 6.1文件下载 6.2文件上传 6.3SSL证书验证 6.4保持会话 6.5requests封装 总结 前言 今天笔者想和大家来聊聊python接口自动化如何使用requests库发送http请求,废话呢笔者就不多说了,直接进入正题. 一.requests库 什么是Requests ?Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2

  • Python接口自动化浅析requests请求封装原理

    目录 以下主要介绍如何封装请求 将常用的get.post请求封装起来 get请求源码: post请求源码: 再来研究下request源码: 直接调用request函数 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析Token应用原理,介绍token基本概念.运行原理及在自动化中接口如何携带token进行访问. 以下主要介绍如何封装请求 还记得我们之前写的get请求.post请求么? 大家应该有体会,每个请求类型都写成单独的函数,代码复用性不强. 接下来将请求类型都封装起来

  • Python接口自动化浅析logging日志原理及模块操作流程

    目录 一.日志介绍 01 为什么需要日志? 02 什么是日志? 03 日志的用途是什么? 04 日志的级别分为哪些? 05 日志功能的实现 二.Logging模块 01 logging模块介绍 02 logging模块优势 03 logging日志框架的组成 04 logging函数中的具体参数 05 简单的日志小例子 06 自定义logger日志 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析pymysql数据库操作流程,主要介绍pymysql安装.操作流程.语法基础及

  • Python接口自动化浅析登录接口测试实战

    目录 1.什么是接口? 那么,接口测试和功能测试的区别在哪呢? 2.如何开展接口测试? 3.如何设计接口用例? 1.获取接口文档 Fiddler 2.分析接口文档的接口,提取测试点 3.接口测试用例设计思路 4.接口测试其他范围 接口业务测试 接口的性能测试 接口安全测试 在项目下新建一个文件夹common 编写登录接口用例,调用封装的请求类. 对于用例的一些总结: 4.接口测试用例实战 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析unittest单元测试原理,主要介绍

  • Python接口自动化浅析unittest单元测试原理

    目录 一.单元测试三连问 1.什么是单元测试? 2.为什么要做单元测试? 3.怎么做单元测试? 二.unittest模块说明 1.unittest简介 2.unittest组成 1.TestCase(测试用例): 2.TestSuite(测试套件): 3.TestLoader(测试用例加载器): 4.TextTestRunner(执行测试用例): 5.Test Fixture(测试环境数据准备和清理): 3.unittest核心工作原理 三.unittest单元测试 1.实现思路 2.使用介绍

随机推荐