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 requests

url = '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 json

app = 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
# 20231219

import requests

def 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.content
            with 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 requests


headers = {"Content-Type": "audio/wav"}
url = 'http://0.0.0.0:1234'


def get_api():
    # form-data

    data = {"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博客 

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 好的,这是如何使用 PythonFlask 来构建一个后端的基本流程: 1. 安装 Flask:使用 pip 安装 Flask 库:`pip install Flask` 2. 创建一个 Flask 应用:创建一个名为 app.py 的文件,并在该文件中导入 Flask 库。 3. 编写 Flask 应用:在 app.py 文件中,使用 Flask 库创建一个 Flask 应用。 4. 定义路由:使用 Flask 应用定义路由,即 URL 地址。 5. 启动服务器:使用 Flask 应用启动服务器,以便对外提供服务。 以下是一个简单的 Flask 应用的示例代码: ``` from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, Flask!" if __name__ == "__main__": app.run() ``` 运行这段代码,Flask 将在本地启动一个服务器,可以通过浏览器访问 http://localhost:5000/ 来查看 "Hello, Flask!" 的结果。 ### 回答2: Python是一种高级编程语言,具有简单易学、语法优雅、功能强大等优点,广泛应用于Web开发。而Flask是一个基于Python的轻量级Web应用框架,非常适合用于构建后端服务。 使用Python编写Flask后端可以实现各种功能和需求,比如处理用户请求、数据存储和查询、业务逻辑处理等。下面是一个简单的示例: 首先,我们需要导入Flask库和相关的依赖库: ``` from flask import Flask, request, jsonify ``` 然后,我们创建一个Flask应用程序: ``` app = Flask(__name__) ``` 接下来,我们可以使用装饰器`@app.route()`来定义路由和请求方法,比如处理一个GET请求: ``` @app.route('/api/users', methods=['GET']) def get_users(): # 处理GET请求逻辑 return jsonify({'users': ['user1', 'user2', 'user3']}) ``` 这个例子展示了一个简单的GET请求处理函数,当用户请求`/api/users`时,会返回一个包含用户列表的JSON响应。 除了GET请求Flask还支持POST、PUT、DELETE等其他请求方法,我们可以使用类似的方式来定义对应的处理函数。 最后,我们需要运行Flask应用程序来启动后端服务: ``` if __name__ == '__main__': app.run() ``` 上述是一个简单的Flask后端示例,实际的应用中会根据具体需求进行不同的处理,比如连接数据库、认证授权、数据校验等。同时,Flask还提供了丰富的扩展和插件,可以更便捷地实现各种功能。 总之,使用Python编写Flask后端可以快速构建可靠、高效的Web服务,满足不同的业务需求。 ### 回答3: Python是一种强大且广泛使用的编程语言,它有许多成熟的框架可以帮助开发人员快速构建各种应用程序。Flask是其中之一,它是一个轻量级的Web应用程序框架,非常适合初学者或小型项目。 使用Python编写一个Flask后端可以带来以下好处: 1. 简单易用:Flask提供简洁的API和灵活的设计模式,使得编写后端逻辑更加直观和易于维护。 2. 快速开发:Python的语法简洁明了,配合Flask框架的扩展,可以快速构建一个功能完善的Web应用程序。 3. 良好的可扩展性:Flask支持各种第三方插件和扩展,可以非常容易地集成其他功能,如数据库连接、缓存、认证等。 4. 丰富的生态系统:PythonFlask都有庞大的生态系统,社区提供了大量的文档、教程和开源项目,开发者可以借鉴和复用这些资源。 编写一个Flask后端的步骤如下: 1. 安装PythonFlask:首先确保在计算机上安装了PythonFlask库,可以通过命令行运行pip install flask来安装。 2. 创建Flask应用:创建一个Python脚本,导入Flask库并初始化一个Flask应用对象。 3. 定义路由和视图函数:使用@app.route装饰器定义URL路由和对应的视图函数,视图函数负责处理请求并返回响应。 4. 处理请求和响应:在视图函数中,可以使用Flask提供的request对象获取请求参数,使用Flask提供的response对象构造响应内容。 5. 启动Flask应用:在脚本的末尾,添加启动应用的代码,通常是app.run()。 6. 测试应用:使用浏览器或HTTP客户端工具发送请求,检查应用是否能正确处理并返回响应。 总结来说,使用Python编写Flask后端可以快速创建一个功能完善的Web应用程序,而且还具备良好的可扩展性和丰富的生态系统。无论是初学者还是有经验的开发者,都可以轻松上手并发挥PythonFlask的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天|여름이다

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值