You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需使用requests库,在代码中直接调用Flask的endpoint接口

可行实现方案

方案1:业务逻辑抽离(最推荐)

该方案从架构层面解耦HTTP层和业务逻辑,完全规避了「调用Flask endpoint」的需求,后续维护、扩展成本最低。你可以把路由中的核心逻辑单独封装为独立函数,HTTP接口和TCP监听逻辑共同调用该函数即可:

from flask import Flask                                                         
import threading

data = 'foo'
app = Flask(__name__)

# 单独抽离核心业务逻辑
def handle_some_command():
    return { 'Some' : 'Response'}

@app.route("/SomeCommand")
def SomeCommand():
    # 路由直接调用通用业务函数
    return handle_some_command()

def flaskThread():
    app.run()

def TcpListenner():
    # TCP逻辑收到对应指令后,直接调用业务函数即可
    while True:
        # 省略TCP socket接收指令的逻辑
        cmd = receive_tcp_cmd()
        if cmd == "SomeCommand":
            resp = handle_some_command()
            # 把resp序列化后返回给TCP客户端即可
            send_tcp_response(resp)

if __name__ == "__main__":
    flaskApp = threading.Thread(target=flaskThread)
    flaskApp.start()
    listenner = threading.Thread(target=TcpListenner)
    listenner.start()

方案2:使用Flask内置测试客户端直接调用路由

如果你的路由逻辑耦合了大量Flask请求上下文相关操作(比如要读取request参数、session等),不想改动现有代码,可以用Flask自带的test_client在进程内模拟发起请求,不需要走网络,也不需要引入requests库:

def TcpListenner():
    # 初始化测试客户端
    client = app.test_client()
    while True:
        # 省略TCP接收指令逻辑
        cmd = receive_tcp_cmd()
        if cmd == "SomeCommand":
            # 模拟调用/SomeCommand路由,支持传查询参数、请求体、头等,和真实请求用法一致
            resp = client.get("/SomeCommand")
            # 从响应中取数据:resp.status_code 是状态码,resp.json 是json格式响应体,resp.data 是原始字节
            resp_data = resp.json
            # 返回给TCP客户端
            send_tcp_response(resp_data)

注意事项

  • 如果调用时遇到Flask上下文相关报错,可以把调用逻辑包在应用上下文管理器中:
with app.app_context():
    resp = client.get("/SomeCommand")
  • test_client支持所有HTTP方法调用,POST/PUT等都可以,传参方式和requests基本一致,比如client.post("/xxx", json={"key":"val"})

内容的提问来源于stack exchange,提问作者HiDDeN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:57:02