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.rhkb.cn/news/221694.html

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

相关文章

微信小程序管理奖品(抽奖)

话不多说直接上代码 功能&#xff1a; 使用微信小程序vant-weapp 组件库中的upload组件以及两个input框 最后拿到的值是一个数组对象的形式 主要代码如下&#xff1a; wxml <view wx:for"{{prizes}}" wx:key"index" class"inputs"><i…

IDEA 黑色主题很难看到鼠标

“控制面板”—搜索“鼠标”关键字—选择“更改鼠标设置” 参考&#xff1a; IDEA 黑色主题很难看到鼠标

【实战】如何在Docker Image中轻松运行MySQL

定义 使用Docker运行MySQL有许多优势。它允许数据库程序和数据分离&#xff0c;增强了数据的安全性和可靠性。Docker Image的轻便性简化了MySQL的部署和迁移&#xff0c;而Docker的资源隔离功能确保了应用程序之间无冲突。结合中间件和容器化系统&#xff0c;Docker为MySQL提供…

Android Canvas状态save与restore,Kotlin

Android Canvas状态save与restore&#xff0c;Kotlin private fun f1() {val bitmap BitmapFactory.decodeResource(resources, R.mipmap.pic).copy(Bitmap.Config.ARGB_8888, true)val canvas Canvas(bitmap)val paint Paint(Paint.ANTI_ALIAS_FLAG)paint.color Color.RED…

常用的电源芯片有哪些?怎么分类

科技的发展也带动了电源的发展&#xff0c;因此需要更多的电源管理芯片。说到电源管理芯片&#xff0c;作为工程师最熟悉的芯片之一。所谓电源管理芯片&#xff0c;就是负责电子设备系统中电能的转换、分配、检测等电能管理的芯片。主要负责识别CPU电源范围&#xff0c;产生相应…

盘古大模型AI生态加速营圆满结营,携手创业者繁荣AI创新生态

“ 共创、共享、共赢 ” 12月15日&#xff0c;华为云加速器——盘古大模型AI生态加速营&#xff08;以下简称“加速营”&#xff09;圆满结营&#xff0c;并举办了面向创投圈层的结营开放日活动。在场的500多位华为云加速器校友、创业者、投资人和媒体朋友&#xff0c;共同…

【RTOS学习】源码分析(信号量和互斥量 事件组 任务通知)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f353;信号量和互斥量&#x1f345;创建&#x1f345;Take&#x1f345;Give &#x…

听GPT 讲Rust源代码--src/tools(16)

File: rust/src/tools/rust-analyzer/crates/ide-completion/src/completions/use_.rs rust-analyzer是一个基于Rust语言的IntelliSense引擎&#xff0c;用于提供IDE自动补全、代码导航和其他代码编辑功能。在rust-analyzer的源代码中&#xff0c;rust/src/tools/rust-analyzer…

算法基础之约数之和

约数之和 核心思想&#xff1a; #include<iostream>#include<algorithm>#include<vector>#include<unordered_map>using namespace std;typedef long long LL;const int N 110 , mod 1e97;int main(){int n;cin>>n;unordered_map<int,int&…

本地文件内容搜索神器AnyTXT Searcher如何搭建与远程访问

文章目录 前言1. AnyTXT Searcher1.1 下载安装AnyTXT Searcher 2. 下载安装注册cpolar3. AnyTXT Searcher设置和操作3.1 AnyTXT结合cpolar—公网访问搜索神器3.2 公网访问测试 4. 固定连接公网地址 前言 你是否遇到过这种情况&#xff0c;异地办公或者不在公司&#xff0c;想找…

node.js mongoose schemaTypes

目录 官方文档 简介 SchemaType 示例 配置SchemaType规则 通用规则 特定schemaType规则 String Number Date Map monggose会根据shcemaType将文档值转换成指定的类型 官方文档 Mongoose v8.0.3: SchemaTypes 简介 SchemaTypes是在使用Mongoose时&#xff0c;用于…

IDEA中如何创建各种类型的java工程

如果你的工程下面的module没有互相依赖&#xff0c;就相当于是一个小的项目&#xff0c;idea版本不同&#xff0c;细节可能不同 1、普通的Java 工程 在工程上&#xff0c;右键- New - Module&#xff0c;如下&#xff1a; 指明Java工程的名称及使用的JDK版本&#xff1a; 创建…

简单几步完成SVN的安装

介绍以及特点 SVN&#xff1a;Subversion&#xff0c;即版本控制系统。 1.代码版本管理工具 2.查看所有的修改记录 3.恢复到任何历史版本和已经删除的文件 4.使用简单上手快&#xff0c;企业安全必备 下载安装 SVN的安装分为两部分&#xff0c;第一部分是服务端安装&…

开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍

在当今数字创意领域&#xff0c;噪波贴图&#xff08;Noise Texture&#xff09;是游戏渲染、游戏开发、美术设计以及影视制作等行业不可或缺的艺术素材之一。为了满足广大创作者的需求&#xff0c;noisecreater.com应运而生&#xff0c;成为一款免费、开源的噪波贴图生成工具。…

手机怎么设置每年公历或农历生日提醒?生日提醒设置小妙招

生日是一个人在一年中比较特殊的日子之一&#xff0c;人们通常希望能够在这一天得到亲朋好友的祝福和庆祝。然而&#xff0c;随着人们生活节奏的加快&#xff0c;很多人表示自己很容易忘记他人的生日&#xff0c;导致不能够及时送出祝福和礼物。如果经常忘记亲朋好友的生日&…

神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一

神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一 学习前言为什么每次训练结果不同什么是随机种子训练中设置随机种子 学习前言 好多同学每次训练结果不同&#xff0c;最大的指标可能会差到3-4%这样&#xff0c;这是因为随机种子没有设定导致的&#x…

SpringBoot访问外部接口的常见方式

文章目录 SpringBoot访问外部接口模拟服务接口RestTemplatepom.xmlRestTemplateConfigClientTestRestTemplateController.java结果 WebClientpom.xmlClientTestWebClientController.java结果 HttpClientpom.xmlClientTestHttpClientController.java结果 OkHttppom.xmlClientTes…

c jpeg 理论霍夫曼 DC AC表,c程序实现正向逆向转换

此4张表是理论表&#xff0c;不是针对某张图片的特定表。如编码程序不统计生成某图片的专用霍夫曼表&#xff0c;应该也可用理论表代用编码。 1.亮度DC表 左边第一列是二进制位数&#xff0c;就是对此位数编码 中间一列是生成比特流的位数&#xff0c;右边是生成的比特流。 …

大数据时代,如何基于机密虚拟化技术构建数据安全的“基石”

云布道师 2023 年 10 月 31 日-11 月 2 日&#xff0c;2023 云栖大会在中国杭州云栖小镇举行&#xff0c;阿里云弹性计算产品专家唐湘华、阿里云高级安全专家刘煜堃、蚂蚁集团高级技术专家肖俊贤三位嘉宾在【云服务器 & 计算服务】专场中共同带来题为《大数据时代&#xf…

打开C#项目时出现“error : 找不到指定的 SDK”的错误解决方法汇总

从github上克隆项目回来&#xff0c;发现编译通过&#xff0c;我是通过一下步骤解决的&#xff1a; 1.到适用于 Visual Studio 的 .NET SDK 下载网址下载对应版本的.NET SDK&#xff0c;关闭当前VS后安装&#xff1b; 2.参考VS2022报错&#xff1a;error : 找不到指定的 SDK“…