Python | Flask测试:发送post请求的接口测试

HTTP/1.1 协议规定的 HTTP 请求方法有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 几种。POST通常用来向服务端提交数据,主要用于提交表单、上传文件。

HTTP 协议是以ASCII码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为四个部分:请求行、请求头、空行、请求体。本文对于post发送数据进行详细解读及人工智能实例。

Python Requests中的Post 方法

如果需要向服务器发送数据,则使用 POST 方法。

POST 方法用于将数据提交到服务器以执行操作或存储数据以备后用。

Python 提供了一个名为“requests”的模块,允许使用 Python 发送 HTTP 请求。

要在 Python 中使用 post 方法,流程如下:

  1. 导入 requests 模块
  2. 创建要发送的数据字典
  3. 向服务器发送包含数据和 URL 的 POST 请求
  4. 从服务器获取响应

Python 的 requests 模块提供了名为 post() 的内置方法,用于向指定的 URI 发出 POST 请求。
语法

requests.post(url, params={key: value}, args)

POST提交数据的 4 种格式即Content-Type的4种形式,尤其注意每种格式中http发送请求时body中数据的格式。4种形式分别是:

  • application/x-www-form-urlencoded:URL encoded
  • multipart/form-data:键值对型数据
  • application/json:Json 类型数据
  • text/xml:xml

1.1.基本方法

import requestsurl = 'https://www.example.com/api'
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, data=data)print(response.text)

 在实际操作中,需要根据数据的格式进行变换~

1.2.多种响应参数变量

  • response.raw:原始响应数据,调用示例:
response.raw.status //响应状态码(200、301、404等)
response.raw.responseTime //响应时间(毫秒)
response.raw.type //响应类型(json等)
response.raw.responseText //响应文本
  • response.json:json格式的响应数据
  • response.headers:响应头
  • response.cookies :响应cookie

data数据实例

  • form表单形式请求数据
  • text
import requests# URL 是api的端口
url = "https://example.com/api"# 要往服务器发送的数据
data = {'name': 'Raju', 'age': 25}# 发送一个post请求
response = requests.post(url, data=data)# 从服务器得到响应
print(response.text)

导入了 requests 模块并创建了一个要发送的数据字典。

使用 requests 模块的 post 方法向服务器发送了一个包含数据和 URL 的 POST 请求。

最后,收到来自服务器的响应并打印。

json数据实例

import requests
import json# URL 是要请求的API端口
url = "https://example.com/api"#数据用json格式发送到服务器
data = {'name': 'Raju', 'age': 25}
json_data = json.dumps(data)# 用json数据发送post请求到服务器
response = requests.post(url, json=json_data)# 从服务器得到响应
print(response.text)

使用 json.dumps() 方法将数据字典转换为 JSON 字符串。

然后使用 json 参数而不是 data 参数向服务器发送包含 JSON 数据的 POST 请求。

最后从服务器接收响应并打印出来。

1.3.使用 POST 方法的优缺点

使用 POST 方法的优点

  • 它比 GET 更安全,因为用户输入的信息在 URL 查询字符串或服务器日志中永远不会可见。
  • 可以传递的数据量有更大的限制,可以使用 POST 发送文本数据和二进制数据(上传文件)。

使用 POST 方法的缺点

  • 由于 POST 方法发送的数据在 URL 中不可见,因此无法使用特定查询为页面添加书签。
  • 从不缓存 POST 请求
  • POST 请求不会保留在浏览器历史记录中。

测试

测试所需文件 flask构建的app.py文件,例如

from flask import Flask
from flask import request
import jsonapp = Flask(__name__)@app.route('/',methods=['GET'])
def hello_world():return 'hello world'# 设置访问URL:'/test',methods:允许哪种方式访问
@app.route('/plus',methods=['POST'])
def plus():data = json.loads(request.data.decode())x = data['x']y = data['y']return json.dumps(x+y)if __name__ == '__main__':# 设置host,端口8080。threaded=True 代表开启多线程app.run(host='0.0.0.0', port=8080, threaded=True)

 测试脚本call_app.py

import requests
url = 'http://127.0.0.1:8080/test'h = requests.post(url=url,json={"x":2,"y":3})
print(h.text)

2.✨人工智能模型中的应用

在人工智能应用中,第三方客户端需要请求正在运行的api端口,来返回查看api端口是否在运行,或者对于ai模型进行自动化测试。

2.1.语音类

语音合成类发送post请求的接口

此处flask app.py文件忽略~

客户端调用(测试文件)call_app.py
# 20231219import requestsdef call_api(tts):url = 'http://0.0.0.0:;1234'data = {'text': tts}try:response = requests.post(url, data=data)if response.status_code == 200:audio_data = response.contentwith open('synthesized_audio.wav', 'wb') as audio_file:audio_file.write(audio_data)print("生成语音文件 synthesized_audio.wav !")else:print(f"Error code : {response.status_code}")except requests.RequestException as e:print(f"Error : {e}")text_to_send = "测试文本 ~"
call_api(text_to_send)

2.2.文本类

此处flask app.py文件忽略~

客户端调用(测试文件)call_app.py

import requests
data = {"text": "NO MARK PLASTIC SCRAP - PET BOTTLE FLAKES WHITE NW. 131,022.00 KGS. 21DAYS FREE TIME DETENTION"
}
header = {"Content-Type": "application/json; charset=utf-8"}
url = "http://服务器IP地址:3344/predict?"
response = requests.post(url, json=data, headers=header)
res = response.json()
print(res)

常见的错误数字状态

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:
200 OK  #客户端请求成功
400 Bad Request  #客户端请求有语法错误,不能被服务器所理解
401 Unauthorized  #请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden  #服务器收到请求,但是拒绝提供服务
404 Not Found  #请求资源不存在,eg:输入了错误的URL
500 Internal Server Error  #服务器发生不可预期的错误
503 Server Unavailable  #服务器当前不能处理客户端的请求,一段时间后可能恢复正常

遇到的错误及解决

【P1】flask request未获取到请求参数问题

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'text'

问题描述:因为语音合成中,输入的是文本,而在第三方客户端请求时,需要与语音合成中的api请求方式相同,

问题原因

问题解决

在api文件中请求文本语句如下

    text = request.form["text"]

说明请求的格式是form-data,而不是json格式,所以在请求响应中也要写

    data = {'text': tts}

     response = requests.post(url, data=data)

(错误待解决)

import requestsheaders = {"Content-Type": "audio/wav"}
url = 'http://0.0.0.0:1234'def get_api():# form-datadata = {"text":"语音合成测试.",}res = requests.post(url,headers=headers, data=data)print(res.text)print(res.status_code)return res,"语音合成完成 !"if __name__ == '__main__':get_api()

 在postman中是可以直接测试的,且这里Content-Type的类型是audio/wav

在第三方客户端测试时依旧出现【PS1】

参考文献

【1】python requests post method

【2】Python’s Requests Library (Guide) – Real Python 

【3】Python发送Post请求及解析响应结果_python post请求-CSDN博客 

【4】python------接口(get请求、post请求), 图片、歌曲下载,网页返回,上传文件 - 文城清枫 - 博客园 (cnblogs.com)

【5】python接口自动化(十)--post请求四种传送正文方式(详解)_python post请求-CSDN博客 

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

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

相关文章

浅析:智能化视频安全监管系统的设计与实现步骤

关于智能化视频监管方案,小编已经和大家分享了很多,今天就和大家来探讨一下关于智能化视频安全监管系统的设计与实现步骤。 首先需要分析需求。要与使用者和业务部门合作,明确系统的功能和需求,例如,确定监控区域、安…

MyBatis——MyBatis的原始Dao开发(了解)

MyBatis的原始Dao开发-了解 使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方式和Mapper接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。在之前的文章已经给大家介绍了基于代理方式的dao开发&#x…

在scrapy 使用selenium模拟登录获取cookie

前言 最近有一点点爬虫需求,想总结一下scrapy框架的一些基本使用方法,加深印象,自己一直习惯使用一些脚本文件运行爬虫,面对数据量非常大,稳定性要求比较高的,效率需求比较高的情况下还是用scrapy较为合适…

Azure Machine Learning - 提示工程高级技术

本指南将指导你提示设计和提示工程方面的一些高级技术。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师&#xff0c…

Python MySQL数据库连接实现增删改查

一、应用场景 python项目连接MySQL数据库时,需要第三方库的支持。这篇文章使用的是PyMySQL库,适用于python3.x。 二、安装 pip install PyMySQL三、使用方法 1.导入模块 import pymysql2.连接数据库 db pymysql.connect(hostlocalhost,usercode_s…

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后,我们可以将寄存器信息保存到设备树,即便是更换了一个设备,我们也无需修改驱动文件,只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式,这两种方式的主要是设备树中 re…

什么是触控芯片?触控芯片有哪些?

一、什么是触控芯片? 触控芯片是一种用于感知人机交互行为的电子元器件,通过感应人体肌肉、电容电场和压力等多种信号,实现触摸屏幕、手势操作、手写输入等功能。二、触控芯片的工作原理 触控芯片的工作原理基于电容原理,当人体肌…

一文读懂PMP项目管理

PMP项目管理是什么 PMP(Project Management Professional)指项目管理专业人员资格认证,由美国项目管理协会(Project Management Institute,简称PMI)发起,目前已在全球206个国家和地区进行认证&…

小黑南京归来,参加部里的公务员培训,有点儿社死认识了好多小伙伴的leetcode之旅13. 罗马数字转整数

小黑代码 class Solution:def romanToInt(self, s: str) -> int:chars [M, CM, D, CD, C, XC, L, XL, X, IX, V, IV,I]nums [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]map_ dict((k, v) for k,v in zip(chars, nums))# 字符串长度n len(s)# 结果变量res …

Java集合转int数组

集合通过toArray()方法进行转换为数组&#xff0c;可以转换成为指定类型的数组&#xff0c; 【但是】这些类型都必须是object类型的子类&#xff0c;基本类型不可以。 可以通过stream流处理&#xff1a; Set<Integer> set new HashSet<>(); int[] result interSet…

Swagger2解放双手的API开发文档生成

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《MyBatis-Plus》。&#x1f3af;&#x1f3af; &am…

NFS原理详解

一、NFS介绍 1&#xff09;什么是NFS 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。 NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。 在本地的NFS客户端的机器看来&#xff0c;NFS服务器端共享的目录就好像自己的磁…

Tomcat为什么要重写类加载器?

文章目录 一、双亲委派机制二、分析1、Tomcat需要隔离性2、Tomcat需要热替换3、打破双亲委派机制 三、Tomcat类加载器1、拓展类加载器2、工作原理 四、总结 一、双亲委派机制 首先了解下双亲委派机制&#xff0c;大致过程如下&#xff1a; 简单来说&#xff0c;就是加载class…

ansible(不能交互)

1、定义 基于python开发的一个配置管理和应用部署工具&#xff0c;在自动化运维中异军突起&#xff0c;类似于xshell一键输入的工具&#xff0c;不需要每次都切换主机进行操作&#xff0c;只要有一台ansible的固定主机&#xff0c;就可以实现所有节点的操作。不需要agent客户端…

位操作符详解(C语言)

前言 C语言中的位操作符是用来对数据的二进制表示进行位级操作的运算符。这些操作符包括位与&#xff08;&&#xff09;、位或&#xff08;|&#xff09;、位异或&#xff08;^&#xff09;、位取反&#xff08;~&#xff09;&#xff0c;这些位操作符可以用来进行各种位级…

【汇编先导】-- 2

汇编先导 6. 寄存器 存储数据&#xff1a;CPU > 内存 > 硬盘(固态、机械) CPU还可分为&#xff1a; 32位CPU 8 16 32 64位CPU 8 16 32 64(增加了寻址能力) 通用寄存器 # 32位的通用寄存器只有8个 # 可以在任意软件的底层看到 # 通用寄存器可以存储任何值存值的范围…

Cesium 实战 - OD 通信线 - 移动连接线

Cesium 实战 - OD 通信线 - 移动连接线 OD 通信线 - 移动连接线核心代码完整代码在线示例 在项目中&#xff0c;实现完卫星通信线之后&#xff0c;又有一个新需求&#xff0c;需要通信线根据火箭移动而移动&#xff0c;相当于追踪效果&#xff0c;思考之后通过 Entity Callback…

【Python可视化系列】一文教会你绘制美观的直方图(理论+源码)

一、引言 前面我详细介绍了如何绘制漂亮的折线图和柱状图&#xff1a; 【Python可视化系列】一文彻底教会你绘制美观的折线图&#xff08;理论源码&#xff09; 【Python可视化系列】一文教会你绘制美观的柱状图&#xff08;理论源码&#xff09; 对于一个连续性的变量&#xf…

中国社科院与新加坡新跃社科联合培养工商管理博士

全球经济正在经历由科技进步与创新、政治和人口的剧烈变化所带来的巨大不确定性与挑战。企业的领导者和管理者需要发展出战略性思维和全球洞察力以便面对越来越大的经济波动。中国社科院与新加坡新跃社科联合培养工商管理博士项目的训练能够让学生在一个企业和组织的改变和发展…

B039-SpringMVC基础

目录 SpringMVC简介复习servletSpringMVC入门导包配置前端控制器编写处理器实现Contoller接口普通类加注解(常用) 路径问题获取参数的方式过滤器简介自定义过滤器配置框架提供的过滤器 springMVC向页面传值的三种方式视图解析器springMVC的转发和重定向 SpringMVC简介 1.Sprin…