python+pytest接口自动化(5)-requests发送post请求

news2024/12/23 16:32:20

简介

在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递。

且协议中并没有规定post请求的请求数据必须使用什么样的编码方式,所以其请求数据可以有不同的编码方式,服务端通过请求头中的 Content-Type 字段来获知请求中的消息主体是何种编码方式,再以对应方式对消息主体进行解析。

post请求参数常用的编码方式如下:

application/x-www-form-urlencoded		                # form表单格式,非常常见
multipart/form-data						# 一般用于上传文件,较为常见
application/json						# json字符串格式,非常常见
text/xml							# xml格式

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

 

关于post请求参数,后面会有文章专门讲述,这里不做过多的阐述。

requests.post()参数说明

使用requests库提供的post方法发送post请求,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)

参数说明:

  1. url,请求网址

  2. data,字典、元组列表、字节或要发送到指定URL的文件对象,可选(即可填可不填)

  3. json,要发送到指定URL的JSON对象,可选

  4. **kwargs,可以添加其他请求参数,如headers、timeout、cookies等

post接口中常用的编码格式在python脚本中对应的请求参数的格式一般就是 dict (字典) 或 json,如 application/x-www-form-urlencoded 格式在python中对应为dict,application/json 在python中对应为json。

因此,接下来分别这种编码格式进行举例。

发送post请求(请求参数格式为dict)

我们以请求TesterHome网的登录接口为例,发送请求参数格式为dict的请求。

请求头中content-type为application/x-www-form-urlencoded;charset=UTF-8,如下图所示:

那么请求参数编码格式应为dict,代码如下: 

import requests

def testerhome_login():
    # data为请求入参
    data = {
        "user[login]": "账号",
        "user[password]": "密码",
        "user[remember_me]": 0,
        "commit": "登录"
    }
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53\
        7.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
    }
    url = "https://testerhome.com/account/sign_in"
    
    # 编码格式为application/x-www-form-urlencoded;charset=UTF-8,所以请求参数为dict,使用data参数
    res = requests.post(url=url, headers=headers, data=data)
    print(res.text)
    print(res.status_code)


if __name__ == '__main__':
    testerhome_login()

运行结果如下:

由打印出来的返回内容,我们可以判断该接口请求成功。

发送post请求(请求参数格式为json)

这里我用flask框架写了个简单的模拟接口来演示,接口代码如下:

from flask import Flask, jsonify, request

app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False

@app.route("/login", methods=["POST"])
def login():
    username = request.json.get("username").strip()
    password = request.json.get("password").strip()
    print(username, password)
    if username and password:
        if username == "lilei" and password == "123456":
            return jsonify(
                {"code": 1000, "msg": "登录成功!", "token": "sh34ljjl08s32730dj"}
            )
        elif username == "hanmeimei" and password == "888888":
            return jsonify(
                {"code": 1000, "msg": "登录成功!", "token": "hjf078977l08ert2323k"}
            )
        else:
            return jsonify(
                {"code": 1001, "msg": "账号或密码错误!"}
            )
    else:
        return jsonify(
            {"code": 1002, "msg": "账号或密码不能为空!"}
        )

if __name__ == '__main__':
    app.run()

 注意需要先安装flask框架,然后运行该模块,具体可参考我之前的文章使用Flask开发简单接口,运行后我们可以看到该接口服务的 host 地址,如下:

这个接口的请求参数格式需要为json,requests.post()请求这个接口代码如下:

import requests
import json

headers = {"Content-Type": "application/json;charset=utf8"}
url = "http://127.0.0.1:5000/login"
_data = {
    "username": "lilei",
    "password": "123456"
}

# 这里使用json参数,即json=_data
res = requests.post(url=url, headers=headers, json=_data).text
# 当然还可以使用data参数,但需先将_data转换为json格式,即data=json.dumps(_data)
# json.dumps()将dict格式转换成json格式
res = requests.post(url=url, headers=headers, data=json.dumps(_data)).text
print(res)

 运行结果如下:

总结

post请求因为请求主体编码格式的原因,在使用 requests.post() 时需要根据接口请求头中Content-Type字段,为请求参数选择指定的编码格式,才能发送请求。其实get请求的请求参数也有其对应的编码格式,至于如何确定get、post请求参数的格式,且听下回详解。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1274339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件格式扩展名转换:将图片png扩展名批量改为jpg的方法

在处理大量图片文件时&#xff0c;可能会遇到需要将文件格式扩展名进行转换的情况。比如&#xff0c;将图片文件从PNG格式转换为JPG格式。这不仅可以节省存储空间&#xff0c;还可以提高图片加载速度&#xff0c;特别是在网页设计中。本文详解如何将PNG图片批量转换为JPG格式的…

java设计模式学习之【建造者模式】

文章目录 引言建造者模式简介定义与用途实现方式&#xff1a; 使用场景优势与劣势建造者模式在spring中的应用CD&#xff08;光盘&#xff09;的模拟示例UML 订单系统的模拟示例UML 代码地址 引言 建造者模式在创建复杂对象时展现出其强大的能力&#xff0c;特别是当这些对象需…

智跃人力资源管理系统 SQL注入漏洞复现

0x01 产品简介 智跃人力资源管理系统是基于B/S网页端广域网平台&#xff0c;一套考勤系统即可对全国各地多个分公司进行统一管控&#xff0c;成本更低。信息共享更快。跨平台&#xff0c;跨电子设备 0x02 漏洞概述 智跃人力资源管理系统GenerateEntityFromTable.aspx接口处存在…

基于单片机的排队叫号系统设计

1&#xff0e;设计任务 利用AT89C51单片机为核心控制元件,设计一个节日彩灯门&#xff0c;设计的系统实用性强、操作简单&#xff0c;实现了智能化、数字化。 基本要求&#xff1a;利用单片机AT89C51设计排队叫号机&#xff0c;能实现叫号功能。 创新&#xff1a;能显示叫号…

【Redis】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

目录 Redis的慢查询 慢查询配置 慢查询操作命令 慢查询建议 Pipeline 事务 Redis的事务原理 Redis的watch命令 Pipeline和事务的区别 Lua Lua入门 安装Lua Lua基本语法 注释 标示符 关键词 全局变量 Lua中的数据类型 Lua 中的函数 Lua 变量 Lua中的控制语句…

Ubuntu22.04 使用Docker部署Neo4j出错 Exited(70)

项目场景&#xff1a; 最近需要使用Neo4j图数据库&#xff0c;因此打算使用docker部署 环境使用WSL Ubuntu22.04 问题描述 拉下最新Neo4j镜像&#xff0c;执行命令部署 启动容器脚本 docker run -d -p 7474:7474 -p 7687:7687 \ --name neo4j \ --env "NEO4J_AUTHneo…

【Web】NewStarCTF Week4 个人复现

目录 ①逃 ②More Fast ③midsql ④InjectMe ⑤PharOne ⑥flask disk ①逃 一眼字符串逃逸 bad 替换为 good 字符增加一位 先构造一下试试 <?php class GetFlag {public $key;public $cmd "ls /";} $a new GetFlag(); echo serialize($a); 得到O:7:…

redis相关题

1 什么是Redis Redis(Remote Dictionary Server) 是⼀个使⽤ C 语⾔编写的&#xff0c;开源的&#xff08;BSD许可&#xff09;⾼性能⾮关系型&#xff08;NoSQL&#xff09;的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串&#xff0c;…

亚马逊云科技:探索未来云计算之窗

云计算技术已经成为现代科技领域中至关重要的一个环节&#xff0c;它为各种行业提供了高效、灵活、可扩展的计算和数据存储解决方案。而在这个领域中&#xff0c;亚马逊云科技&#xff08;Amazon Web Services&#xff0c;AWS&#xff09;以其卓越的技术创新和广泛的云服务覆盖…

“阿里巴巴接口:打造高效电商解决方案的秘密武器”

阿里巴巴接口技术贴 一、概述 阿里巴巴接口是阿里巴巴集团提供的一套开放API接口&#xff0c;旨在为开发者提供与阿里巴巴生态系统进行数据交互的能力。通过使用阿里巴巴接口&#xff0c;开发者可以快速构建与阿里巴巴平台无缝集成的应用程序&#xff0c;提高开发效率和用户体…

zabbix配置snmp trap--使用snmptrapd和Bash接收器(图文教程)

1.前言 我的zabbix的版本是5.0版本&#xff0c;5.0的官方文档没有使用bash接收器的示例&#xff0c;6.0的官方文档有使用bash接收器的示例&#xff0c;但是&#xff0c;下载文件的链接失效&#xff1f;&#xff01; 这里讲解zabbix-server端配置和zabbix web端配置 2.zabbix-…

人工智能的技术研究与安全问题的深入讨论

人工智能&#xff08;AI&#xff09;作为当今世界技术领域的热门话题&#xff0c;吸引了广泛的关注和研究。本文将探讨人工智能技术的最新研究进展&#xff0c;并着重讨论与人工智能安全相关的问题。 引言 人工智能技术的迅速发展为我们的生活带来了翻天覆地的变化。随着科技的…

计网Lesson5 - MAC 地址与 ARP

文章目录 M A C MAC MAC 地址1. M A C MAC MAC 地址的格式 2. M A C MAC MAC 地址的获取3. A R P ARP ARP 协议4. A R P ARP ARP 缓存5. R A R P RARP RARP M A C MAC MAC 地址 1. M A C MAC MAC 地址的格式 每个网卡都有一个 6 6 6 字节的 M A C MAC MAC 地址 M A C…

【模电】基本共射放大电路的组成及各元件的作用

基本共射放大电路的组成及各元件的作用 下图所示为基本共射放大电路&#xff0c;晶体管是起放大作用的核心元件。输入信号 U ˉ i Ū\tiny i Uˉi 为正弦波电压。   当 u i 0 {u\tiny i}0 ui0时&#xff0c;称放大电路处于静态。在输入回路中&#xff0c;基极电源 V B B V\t…

【稳定检索|投稿优惠】2024年经济管理与安全科学国际学术会议(EMSSIC 2024)

2024年经济管理与安全科学国际学术会议(EMSSIC 2024) 2024 International Conference on Economic Management and Security Sciences(EMSSIC 2024) 一、【会议简介】 2024年经济管理与安全科学国际学术会议(EMSSIC 2024)&#xff0c;将于繁华的上海城召开。这次会议的主题是“…

STM32F407-14.3.7-01PWM输入模式

PWM 输入模式 此模式是输入捕获模式的一个特例。其实现步骤与输入捕获模式基本相同&#xff0c;仅存在以下不同之处&#xff1a; 例如&#xff0c;可通过以下步骤对应用于 TI1① 的 PWM 的周期&#xff08;位于 TIMx_CCR1⑨ 寄存器中&#xff09;和占空 比&#xff08;位于 …

替代升级虚拟化 | ZStack Cloud云平台助力中节能镇江公司核心业务上云

数字经济正加速推动各行各业的高质量升级发展&#xff0c;云计算是数字经济的核心底层基础设施。作为云基础软件企业&#xff0c;云轴科技ZStack 坚持自主创新&#xff0c;自研架构&#xff0c;产品矩阵可全面覆盖数据中心云基础设施&#xff0c;针对虚拟化资源实现纳管、替代和…

【服务部署】常用内网穿透方案

一、前言 由于一些开发及使用需求&#xff0c;需要将内网机器端口映射到公网&#xff0c;达到公网访问内网环境的目的 本文主要介绍几种常用的内网穿透方案 ssh远程端口转发 部署简单&#xff0c;无需额外安装软件包 frp反向代理 功能配置丰富&#xff0c;部署相对复杂&#…

git 出现 failed to push some refs to ‘xxx‘

初始化仓库 推送代码 git push -u origin “master” git 出现 failed to push some refs to ‘xxx’ 错误 出错截图&#xff1a; 原因&#xff1a; 本地init创建的仓库&#xff0c;主分支叫main&#xff0c;而这里推的分支是 master 刚刚初始化的仓库没有 main分支 所以推不上…

【散列函数的构造方法(直接定址法 ==除留余数法==),散列表的查找(1.开放地址法,2.链地址法(拉链法))】

文章目录 散列函数的构造方法直接定址法除留余数法 散列表的查找1.开放地址法线性探测法二次探测法伪随机探测法 2.链地址法&#xff08;拉链法&#xff09; 散列表的查找效率 散列函数的构造方法 散列存储 选取某个函数&#xff0c;依该函数按关键字计算元素的存储位置。 Loc…