Python接口测试- requests 发送 post 请求的几种方法

news2025/3/15 19:29:42

前言:

POST 请求用于向服务器发送数据。与 get 相比更安全,同时 post 请求一般会带来数据的更改。

GET 请求不论我们怎么构造,最终都是通过 URL 向服务器传递数据,而 post 通过消息体(报文主体)发送请求。

在发送 post 请求的时候,我们需要关注一下 HTTP 请求的头部信息,特别是

Content-Type

这是用来告诉服务器请求中包含的数据类型。这会影响服务器如何提取数据。

常见的

Content-Type

如下:

  1. application/x-www-form-urlencoded
    这是最常见的数据类型,通常表明请求的数据类型是键值对类型,也就是页面 form 表单数据,如:

    username=nemo&password=123456
  1. application/json
    这意味着请求的数据类型是 Json 格式的数据:

    {"username":"nemo", "password":"123456"}

 

  1. multipart/form-data
    multipart/form-data 通常用于上传文件。

  2. application/xml
    这表明数据格式为 xml 格式。

前两种是较为常见的数据类型,一般默认情况下都是使用

application/x-www-form-urlencoded

 

在 requests 的 post 请求中以此为默认的数据类型。

由于之前提供的免费 API 中 post 请求基本上都没法使用,我们还是采用之前在 postman 中使用过的过的  showdoc 小项目中的登录为例,来演示如何发送 post 请求。

首先,我们先登录后抓包:

image

通过抓包可以获取到我们需要的数据:

  • 请求 url

  • content-type:application/x-www-form-urlencoded

  • 请求报文数据:username=showdoc&password=123456&v_code=

    import requests
     
    url = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 以字典的形式构造数据data = {
        'username': 'showdoc',
        'password': '123456'}# 与 get 请求一样,r 为响应对象r = requests.post(url, data=data)# 查看响应结果print(r.json())

由于 requests 默认以 content-type:application/x-www-form-urlencoded 发送 post 请求,所以这里我们不需要特殊处理。

同样,我们可以通过响应对象 r 查看请求和响应中的其他内容:

查看实际的请求数据:

print(r.request.body)## username=showdoc&password=123456

查看响应中的 cookie:

print(r.cookies)## <RequestsCookieJar[<Cookie cookie_token=...1b4181689f for 127.0.0.1/>]>

这里的 cookie 是服务端返回的,会用在后续的请求中,如果需要获取:

print(r.cookies.get('cookie_token'))## 2e7afd2de4dfdab4187b3587f6d532654f854b14f91b4181689f0ddd2fdfa0b9

发送 json 格式的数据

requests 默认使用 form 表单的形式发送数据,那如果服务器要求使用 json 格式呢?

有两种方法可以处理:

  1. 修改请求头部,传入自定义的 content-type

  2. 通过参数 json 传递数据

修改请求头部:

import requests
 
url = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 注意这里必须以json字符串构造数据data = '''
{
    "username": "showdoc",
    "password": "123456"
}
'''headers = {'content-type': 'application/json'}# 与 get 请求一样,r 为响应对象r = requests.post(url, data=data, headers=headers)# 查看响应结果print(r.json())# 查看请求头部print(r.request.headers)## 你可以看看 content-type 字段

直接使用 json 参数

import requests
 
url = 'http://127.0.0.1/showdoc/server/index.php?s=/api/user/login'# 这里依然以字典的形式构造数据data = {
    'username': 'showdoc',
    'password': '123456'}# 与 get 请求一样,r 为响应对象r = requests.post(url, json=data)# 查看响应结果print(r.json())# 查看请求头部print(r.request.headers)## 你可以看看 content-type 字段

使用 json 参数传递,除了会增加 content-type 为

 application/json 

外,还会将 data 字典自动编码为 json 格式。

而如果我们自定义 content-type 的方式还需要自己将数据构造成 json 格式的数据

所以 ,明显直接使用第二种方式更方便,所以强烈推荐直接用第二种方式。

当然如果涉及到非 form 和 json 格式的数据,就必须要用第一种方式自己构造 content-type 了。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

简单的职员管理系统 SpringBoot企业员工信息java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 简单的职员管理系统 SpringBoot 系统有1权限&#xf…

海外电子商务源代码跨境系统开发,Java现成代码全开源

海外电子商务跨境系统的开发是一个复杂的过程&#xff0c;而利用现成的Java代码进行开发可以节省时间和成本。下面是海外电子商务跨境系统开发的全开源步骤。 第一步&#xff1a;需求分析和规划 在开发海外电子商务跨境系统之前&#xff0c;需要进行需求分析和规划。这包括确定…

迅镭激光PL12050重载型激光切管机中标国内知名企业美的集团!

近日&#xff0c;迅镭激光重型激光切管机中标国内知名企业——美的集团! 成立于2002年的菱王电梯&#xff0c;是美的集团暖通与楼宇事业部旗下的专业电梯品牌 &#xff0c;业务覆盖电(扶)梯的研发、设计、制造、销售、安装和维保&#xff0c;自主研发的8m/s超高速电梯和8吨超重…

使用雅克比矩阵计算Rossler映射的lyapunov exponent图谱

Rossler映射如下: 雅可比行列式方法 计算Henon映射的Lyapunov exponent图谱,算法描述为: 0:初始化:初始化用到的值。参数a:[0,1.4],b:0.3,初始值x和y:1,迭代次数M:2000。 1:遍历参数a:计算不同a值所对应的Henon映射的Lyapunov exponent图谱。 2:迭代M次:…

selenium爬虫与配置谷歌浏览器的driver问题

用selenium爬虫时&#xff0c;明明已经安装了selenium模块&#xff0c;程序却运行不了。在使用selenium之前必须先配置浏览器对应版本的webdriver 本文主要涉及驱动有问题driver 网上有很多手动的方法&#xff08;查看谷歌浏览的版本然后在其他博主分享的webdriver中下载与自己…

MySQL存储结构及索引

文章目录 MySQL结构1.2存储引擎介绍1.3存储引擎特点InnoDB逻辑存储结构 MyISAMMemory区别及特点存储引擎选择 索引索引概述索引结构BTreeHash索引分类聚集索引&二级索引索引语法SQL性能分析索引优化最左前缀法则范围查询字符串不加引号模糊查询or连接条件数据分布影响覆盖索…

13个Python最佳编程技巧,越早知道越好

每天我们都会面临许多需要高级编码的编程挑战。你不能用简单的 Python 基本语法来解决这些问题。在本文中&#xff0c;我将分享 13 个高级 Python 脚本&#xff0c;它们可以成为你项目中的便捷工具。如果你目前还用不到这些脚本&#xff0c;你可以先添加收藏&#xff0c;以备留…

js迭代器与生成器

目录 迭代器next可迭代对象自定义类的迭代迭代器的中断 生成器生成器函数返回值与传递参数生成器的提前结束生成器的语法糖使用生成器实现自定义类迭代 async和awaitawait 迭代器 迭代器&#xff08;iterator&#xff09;&#xff0c;可以把它当做是一个接口&#xff0c;用户可…

Vue3 Props组件简单应用(子组件获取父组件数据)

去官网学习→Props | Vue.js 运行示例&#xff1a; 代码&#xff1a;App.vue <template><img alt"Vue logo" src"./assets/logo.png"><!-- 传递数据 key value--><Mycomponent :dataTest"content" :dataNmub&…

GPT-3.5 人工智能还是人工智障?——西红柿炒钢丝球!!

人工智能还是人工智障&#xff1f;——西红柿炒钢丝球 西红柿炒钢丝球的 基本信息西红柿炒钢丝球的 详细制作方法材料步骤 备注幕后花絮。。。。。。。。。关于GPT-3.5&#xff0c;你的看法&#xff1a; 西红柿炒钢丝球的 基本信息 西红柿炒钢丝球是一道具有悠久历史的传统中式…

leetcode经典算法——快速幂

实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 暴力方法肯定是循环循环n次&#xff0c; 每一次*x 显然此方法遇到大的数字会超时 那么我们要引进一个思想&#xff0c;快速幂算法 例如&#xff1a; x^97 我们可以看出&a…

柜柜软件报价单滑动闪屏解决办法

柜柜下载地址:家具设计软件免费下载-家居设计软件手机版下载-柜柜App官网 出现的问题现象: 原因:笔记本使用的集成显卡,切换到独立显卡即可解决 异常修复.

ONVIF对讲功能漫谈

ONVIF对讲功能漫谈 前言一、onvif对讲功能和onvif协议关系大吗?二、如何上报设备支持onvif对讲功能呢?三、onvif协议中哪个接口上报音频解码配置?四、献上抓包报文:前言 本篇文章尝试使用提问的方式来分享onvif对讲功能那点事。 一、onvif对讲功能和onvif协议关系大吗? on…

windows10中配置mmhuman3d

分类&#xff1a;动作捕捉 github地址&#xff1a;https://github.com/open-mmlab/mmhuman3d 所需环境&#xff1a;Windows10&#xff0c;CUDA11.6&#xff0c;conda 4.13.0&#xff0c;Visual Studio 2017 目录 一.新建Pytorch基本环境1.创建并激活环境2.安装ffmpeg3.安装 PyT…

21、stm32使用LTDC驱动LCD

注&#xff1a;本文基于stm32使用FMC驱动SDRAM(IS42S32800G-6BLI)工程继续开发 本例使用安富莱的H743XIH板子驱动LTDC点亮7寸LCD 硬件接线&#xff1a;RGB888 一、cubemx配置 1、LTDC配置 注意此引脚应于上面的硬件接线图一致 2、配置DMA2D 3、背光引脚和触摸引脚 4、时钟…

cpu使用率,CPU使用率指的是什么

目录 1、cpu使用率CPU使用率指的是什么&#xff1f; 2、cpu利用率100&#xff1f; 3、电脑CPU使用率居高不下&#xff1f; 4、cpu使用率100怎么恢复默认&#xff1f; 5、cpu使用率98&#xff1f; 1、cpu使用率CPU使用率指的是什么&#xff1f; CPU使用率其实就是运行的程…

SQL | 计算字段

7-创建计算字段 7.1-计算字段 存储在数据库中的数据一般不是我们所需要的字段格式&#xff0c; 需要公司名称&#xff0c;同时也需要公司地址&#xff0c;但是这两个数据存储在不同的列中。 省&#xff0c;市&#xff0c;县和邮政编码存储在不同的列中&#xff0c;但是当我们…

B056-Mybatis增强

目录 域对象&#xff08;domain&#xff09;之间的关系A 表结构上是如何设计关系的B 实体对象上是如何设计关系的回顾多表查询 结果映射多对一/一对一DomainDepartmentEmployee MapperEmployeeMapperEmployeeMapper_嵌套结果.xml&#xff08;推荐使用&#xff09;EmployeeMappe…

(4)各个属性角色分析显示-4

将折线图、数据集、散点图集合在一个html文件中&#xff1a; &#xff08;1&#xff09;将折线图、数据集、散点图设置为函数a()、b()、c()&#xff0c; &#xff08;2&#xff09;再调用page.add()函数&#xff0c;将三个图片组合在一起 &#xff08;3&#xff09;运行page.…

python sqlalchemy 动态设置表名__tablename__,一个model对应多个table

我们在上一篇中说明了&#xff0c;如何在.net core的efcore中动态设置表名。 本文讲述如何在sqlalchemy中动态设置表名&#xff0c;使多个table可以对应到一个model 表如下 code example from sqlalchemy import create_engine,Column,BigInteger,String from sqlalchemy.ext…