如何检测API请求是否来自Excel/PowerBI?
检测Excel/PowerBI的API请求:User-Agent及替代方案
一、通过User-Agent识别Excel/PowerBI
可以通过User-Agent头识别这两类应用的请求,它们的请求头里会包含明确的标识关键词,以下是典型格式:
- Excel:不同版本的格式略有差异,但核心关键词
Microsoft Excel会被保留,比如:
部分旧版本可能仅显示Microsoft Excel/16.0.15726.20188 (Windows NT 10.0; Microsoft Excel 16.0.15726; Pro)Microsoft Excel。 - PowerBI:请求头会包含
PowerBI或Microsoft Power BI标识,比如桌面端:
云端PowerBI服务的请求则会带有Microsoft Power BI Desktop/2.118.614.0 (Windows NT 10.0; Microsoft Power BI Desktop 2.118.614.0; Pro)PowerBI Service相关标识。
你可以在API中通过匹配这些关键词来判断请求来源,不过要注意:User-Agent是可自定义的,若涉及安全校验,不能仅依赖此字段。
二、无需本地运行API获取请求头的方法
既然无法本地调试API,你可以通过以下方式获取Excel/PowerBI的请求头信息:
- 临时请求捕获服务:
搭建一个简单的本地HTTP服务,用工具(如ngrok)将其暴露到公网,然后在Excel/PowerBI中配置这个公网地址作为数据源,就能捕获到完整的请求头。比如用Python Flask快速实现:
启动后用ngrok映射from flask import Flask, request app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def capture_headers(): return "\n".join([f"{k}: {v}" for k, v in request.headers.items()]) if __name__ == '__main__': app.run(port=5000)5000端口,得到一个公网URL,在Excel中通过「数据>自Web」输入该URL,就能在Flask服务的响应中看到Excel发送的所有请求头。 - 查阅官方文档:
微软官方文档会记录这类工具发起HTTP请求的默认头信息,比如PowerBI的数据源请求规范、Excel的OData请求文档中,都有关于User-Agent的说明。 - 模拟请求验证:
参考已知的User-Agent格式,用Postman、curl等工具模拟请求,验证API的识别逻辑是否生效。比如curl命令:curl -H "User-Agent: Microsoft Excel/16.0.15726.20188" https://your-test-endpoint.com
三、额外提示
- 不同版本的Excel/PowerBI可能会更新User-Agent格式,建议定期测试并调整匹配规则。
- 如果是敏感场景的校验,建议结合其他机制(如IP白名单、请求签名、认证令牌),避免仅依赖可篡改的User-Agent字段。
内容的提问来源于stack exchange,提问作者Manib
相关产品推荐
相关产品推荐

