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

如何在Streamlit应用中获取来源URL?

在Streamlit中获取请求来源URL(Referrer)的方法

因为Streamlit没有直接暴露类似Flask request.referrer的API,你可以通过以下两种变通方案实现需求:

方案1:通过前端自定义组件读取document.referrer

浏览器的document.referrer属性会记录当前页面的跳转来源,我们可以写一个极简的自定义组件来读取该值并传回Streamlit后端。

组件代码(保存为referrer_component.py)

import streamlit as st
import streamlit.components.v1 as components

def get_referrer():
    # 前端JS读取referrer并发送给Streamlit
    js_code = """
    <script>
        const referrer = document.referrer;
        window.parent.postMessage({
            type: 'streamlit:setComponentValue',
            value: referrer
        }, '*');
    </script>
    """
    return components.html(js_code, height=0)

主应用调用

import streamlit as st
from referrer_component import get_referrer

st.title("获取跳转来源URL示例")

referrer = get_referrer()
if referrer:
    st.success(f"请求来源:{referrer}")
else:
    st.info("无跳转来源(直接访问页面)")

方案2:利用Streamlit底层Flask添加中间件捕获请求头

Streamlit基于Flask运行,我们可以通过修改Flask实例的中间件,在请求到达时捕获request.referrer并存入会话状态。

示例代码

import streamlit as st
from flask import request
from streamlit.web.server.server import Server

def get_flask_app():
    # 获取Streamlit底层的Flask应用实例
    server = Server.get_current()
    return server._app if server else None

# 添加Flask前置请求中间件
flask_app = get_flask_app()
if flask_app:
    @flask_app.before_request
    def capture_referrer():
        if 'referrer' not in st.session_state:
            st.session_state['referrer'] = request.referrer

st.title("通过Flask中间件获取Referrer")

if 'referrer' in st.session_state:
    referrer = st.session_state['referrer']
    st.success(f"请求来源:{referrer}" if referrer else "无跳转来源(直接访问页面)")
else:
    st.info("请刷新页面完成初始化")

注意事项

  • 方案1兼容性更强,不依赖Streamlit底层实现,但需要用户浏览器启用JavaScript;
  • 方案2直接从HTTP请求头获取数据更可靠,但依赖Streamlit的Flask底层架构,未来版本可能存在兼容性风险;
  • 无论哪种方案,referrer都可能为空(比如用户直接输入URL访问、跨协议跳转、浏览器隐私设置阻止发送等场景)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:33:18