如何在浏览器开发者工具Network标签追踪Streamlit应用的API调用?
能在浏览器开发者工具Network标签追踪Streamlit应用的API调用吗?
答案是肯定的,但默认情况下你可能找不到目标请求,因为Streamlit的大部分数据交互(包括部分API调用)是通过WebSocket通道传输的,而非普通HTTP请求。下面是具体的解决思路和方法:
为什么默认看不到?
Streamlit启动后会建立一个WebSocket连接(端点为/stream),用来实时同步UI状态、传输数据。如果你是通过Streamlit内置机制(比如st.cache_data、st.experimental_connection)发起的API调用,请求会被封装在WebSocket的帧消息里,不会单独出现在Network的XHR/fetch列表中。
如何找到这些API调用?
- 过滤WebSocket流量:
在浏览器开发者工具的Network标签里,把过滤器切换为「WS」(WebSocket),找到名为/stream的连接。点击进入后切换到「Frames」标签,就能看到所有通过这个通道传输的消息,其中包含你的API请求和响应的详细内容(需要解析JSON格式的消息体)。 - 检查普通HTTP请求:
如果你的API调用是直接用requests、fetch等原生方式发起的(未经过Streamlit封装),请检查Network标签的过滤器:- 不要只选「XHR」,试试切换到「All」或「Other」;
- 勾选「Disable cache」选项,避免请求被浏览器或Streamlit的缓存机制拦截。
- 开启Streamlit调试日志:
启动应用时添加命令行参数:streamlit run your_app.py --logger.level=debug,终端会输出所有API请求的细节,包括请求URL、参数、响应状态码和内容,配合Network工具调试更高效。
实用调试技巧
- 如果你是自己编写的API调用代码,可以在请求前后添加打印语句,或者用
st.write()输出请求状态码、响应内容,快速验证请求是否成功; - 使用
st.cache_data或st.experimental_memo时,缓存会导致重复请求不触发,调试阶段可以暂时注释掉缓存装饰器,确保每次操作都会发起新的API请求。
内容的提问来源于stack exchange,提问作者mattiatantardini
相关产品推荐
相关产品推荐

