二:前端发送POST请求,后端获取数据

news/2025/2/25 0:26:55

接着一:可以通过端口访问公网IP之后
二需要实现:点击飞书多维表格中的按钮,向服务器发送HTTP请求,并执行脚本程序

向服务器发送HTTP请求:

发送请求需要明确一下几个点

  1. 请求方法:
    由于是向服务器端发送值,因此选择的是POST请求
  2. 请求的URL:
    请求的url就是http://公网IP:port/doc
    a. http不可以写成https,否则会报首次握手失败
  3. 查询参数:
    查询参数通常是在URL末尾以?开头的,多个参数使用&连接
    http://公网IP:port/doc?name=liming&age=30
  4. 请求头:
    一般用于描述请求的格式,认证信息和缓存控制等
    比如Authorization,Content-Type等
    在终端,-H “Content-Type: application/json”
    -H “Authorization: Bearer my_token” 形式存在
  5. 请求体:
    客户端发送给服务器的数据部分,通常用于提交表单,发送JSON数据,上传文件等
    请求头中包含请求体的格式比如application/JSON,text/plain,multipart/form-data,application/X-www-form-urlencoded等
    在这里插入图片描述

后端如何get上述请求中传输的变量

HTTP以不同形式传入的参数使用的get方法也是不一样
使用Flask处理HTTP请求

  1. 获取查询参数request.args.get(‘[变量名]’)
    get到的参数均是以字符串的形式存在
from flask import Flask, request
app = Flask(__name__)

@app.route('/doc', methods=['POST'])
def api():
    # 获取查询参数
    name = request.args.get('name')  # 通过 request.args 获取 URL 查询参数
    age = request.args.get('age')

    # 获取 POST 请求的 JSON 数据
    json_data = request.json  # request.get_json() 也可以

    return {"query_params": {"name": name, "age": age}, "body": json_data}

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

使用windows中的终端尝试是否能够访问端口并打印出内容,如果少了一个参数可能会导致服务器返回500 Internal Server Error错误

curl -X POST "http://[公网IP]:[端口号]/doc?name=liming&age=30
  1. 获取请求头 request.headers.get()
user_agent = request.headers.get('User-Agent')
auth_token = request.headers.get('Authorization')
  1. 获取请求体
    总结
request.json         # 解析 JSON 数据
request.form        # 解析表单数据(x-www-form-urlencoded)
request.files       # 解析文件(multipart/form-data)
request.data        # 读取原始请求体

a. Json请求体 request.json
在终端以
-d '{“name”: “Alice”, “age”: 25}'的形式存在

data = request.json #这一句即可获取请求体

b. 表单发送请求体 request.form.get()
-d “username=alice&password=123456”

username = request.form.get("username")
    password = request.form.get("password")

c.文件上传请求体
-F “file=@image.jpg”

file = request.files['file']  # 获取上传的文件
    file.save(f"./uploads/{file.filename}")

客户端向服务器发送HTTP请求

第一种方式:requests请求,适合API请求
  1. 发送请求
import requests

url = "http://example.com/api"
headers = {"Content-Type": "application/json"}
data = {"key": "value"}

response = requests.request("POST", url, headers=headers, json=data)
print(response.json())  # 解析 JSON 响应

这种返回的是response.Response对象
可以通过方法返回想要得到的内容

response.status_code # 例如 200(成功)、400(请求错误)、500(服务器错误)
response.headers #服务器返回的HTTP的头部信息
response.text #以字符串的形式获取相应内容
response.content  #以字节流的形式获取相应内容

如果返回的是JSON数据

data = response.json()  # 解析 JSON 数据
data = response.json().get('data')  # 从json中提取data字段的值,不会报错

.json()用于解析服务器返回的json数据,转化为python字段
.get(‘data’)从解析后的JSON字段中获取data字段的值

第二种方式http.client适用于底层的HTTP处理
import http.client
import json

conn = http.client.HTTPSConnection("example.com")  # 需要指定域名
headers = {"Content-Type": "application/json"}
payload = json.dumps({"key": "value"})  # 需要手动转换为 JSON 字符串

conn.request("POST", "/api", payload, headers)
res = conn.getresponse()
data = res.read().decode("utf-8")  # 需要手动解码

print(data)  # 这里是字符串,需要再用 json.loads(data) 解析

区别:
在这里插入图片描述


http://www.niftyadmin.cn/n/5864880.html

相关文章

即插即用Transformer、扩散模型、机器人规划、长文本检索增强生成 | Big Model Weekly 第57期...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 01 ProTransformer: Robustify Transformers via Plug-and-Play Paradigm 近年来,基于Transformer的架构在机器学习的各个领域占据了主导地位。本文介绍了一种新颖的鲁棒性注意力机制,旨…

【论文阅读】SAM-CP:将SAM与组合提示结合起来的多功能分割

导言 近年来,视觉基础模型的快速发展推动了多模态理解的进步,尤其是在图像分割任务中。例如,Segment Anything模型(SAM)在图像Mask分割上表现出色,但在语义及实例分割方面仍存在局限。本文提出的SAM-CP&am…

Spring5框架八:整合Mybatis

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 1、导入相关的jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>…

java后端开发day19--学生管理系统升级

&#xff08;以下内容全部来自上述课程&#xff09; 1.要求及思路 1.总体框架 2.注册 3.登录 4.忘记密码 2.代码 1.javabean public class User1 {private String username;private String password;private String personID;private String phoneNumber;public User1() {}…

【多语言生态篇六】【DeepSeek×Node.js:WebSocket实时服务从入门到“超神“指南(史诗级万字拆解)】

各位WebSocket老司机们系好安全带!今天我们要把《DeepSeekNode.js:WebSocket实时服务》这本"武功秘籍"揉碎了掰开了讲。从单机玩具到百万级并发,从握手原理到熔断限流,咱们边撸代码边开车,全程高能无尿点! 一、开篇暴击:WebSocket的"真香"现场 先来…

深度学习入门--神经网络

初学&#xff0c;若有错误&#xff0c;恳请指正。 目录 初学&#xff0c;若有错误&#xff0c;恳请指正。 3.1 从感知机到神经网络 3.1.1 神经网络的例子 3.1.2 复习感知机 3.1.3 激活函数登场 3.2 激活函数 3.2.1 sigmoid 函数 3.2.2 阶跃函数的实现 3.2.3 阶跃函数…

合理建模--最短路径

这道题目难就难在如何想到用最短路径来做 主要是这个题目不能用bfs来写&#xff0c;因为距离并不是1 狄克斯特拉算法很久没写了&#xff0c;有些地方生疏了 且这个题目需要记录三个信息&#xff0c;得用tuple 题目地址 int dx[] {0,0,1,-1};int dy[] {1,-1,0,0}; class Solut…

【漫话机器学习系列】103.学习曲线(Learning Curve)

学习曲线&#xff08;Learning Curve&#xff09;详解 1. 什么是学习曲线&#xff1f; 学习曲线&#xff08;Learning Curve&#xff09;是机器学习和深度学习领域中用于评估模型性能随训练过程变化的图示。它通常用于分析模型的学习能力、是否存在过拟合或欠拟合等问题。 从…