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

能否通过HTTP请求调用Dash应用并传递数据,服务端如何接收?

问题解答:通过HTTP请求调用Dash应用并传递数据

核心问题原因

  • HTTP协议不推荐GET请求携带请求体,Dash底层依赖的Flask框架默认会忽略GET请求的body内容,因此你无法通过flask.request读取到GET请求body里的payload。
  • 你已经收到应用HTML响应,说明服务端实际响应了请求,无打印输出大概率是你打印flask.request的代码位置不对,没有放在路由处理/页面布局生成的逻辑内。

可行解决方案

方案1:GET请求传递查询参数(推荐)

GET请求适合把参数拼接在URL的查询字符串中,客户端修改请求代码如下:

import requests

payload = {'download': True}

def make_request():
    url = "http://127.0.0.1:8050/app1"
    # 用params参数传递,requests会自动拼接为查询串
    r = requests.get(url, params=payload)
    print(r.text)

服务端在布局生成函数中读取参数即可:

from dash import Dash, html
import flask

app = Dash(__name__)

# 布局用函数返回,每次请求都会重新执行逻辑
def app_layout():
    # 打印请求对象
    print(flask.request)
    # 读取GET查询参数
    download_flag = flask.request.args.get("download", False)
    return html.Div([html.P(f"下载参数值:{download_flag}")])

app.layout = app_layout

if __name__ == '__main__':
    app.run(port=8050)

方案2:POST请求传递body参数

如果参数内容较多或者敏感,可改用POST请求,客户端修改代码如下:

import requests
import json

payload = {'download': True}

def make_request():
    url = "http://127.0.0.1:8050/app1"
    # 改用post方法,json参数自动序列化并设置正确请求头
    r = requests.post(url, json=payload)
    print(r.text)

服务端需要修改路由配置,允许POST方法:

from dash import Dash, html
import flask

app = Dash(__name__)
# 获取底层Flask实例,修改路由支持POST
server = app.server
server.url_map.strict_slashes = False
for rule in server.url_map._rules:
    if rule.rule == '/app1':
        rule.methods = {'GET', 'POST'}

def app_layout():
    print(flask.request)
    # 读取POST请求的JSON body
    if flask.request.method == 'POST':
        download_flag = flask.request.get_json().get("download", False)
    else:
        download_flag = flask.request.args.get("download", False)
    return html.Div([html.P(f"下载参数值:{download_flag}")])

app.layout = app_layout

if __name__ == '__main__':
    app.run(port=8050)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:12:03