在Google表格菜单调用Google App Script访问Binance API时出现403错误
解决Google Sheets菜单调用Binance API返回403的问题
这个问题的核心原因是脚本编辑器运行环境和Spreadsheet菜单触发环境的请求头存在差异,Binance的API服务器会拦截缺少合法User-Agent的请求,返回403禁止访问。
当你在脚本编辑器里直接运行函数时,UrlFetchApp使用的默认请求头可能被Binance的API识别为合法请求;但通过表格菜单触发时,请求的默认User-Agent会有所不同,被API判定为非授权的自动化请求,从而被拒绝。
解决方案:添加自定义请求头
你只需要在UrlFetchApp.fetch的配置选项中添加一个模拟浏览器的User-Agent头,就能让Binance API接受你的请求。修改后的函数代码如下:
function getCoinUSDValueBinance(){ var url = 'https://api.binance.com/api/v3/ticker/price' Logger.log('URL set'); // 添加自定义请求头,模拟浏览器请求 var options = { 'muteHttpExceptions': true, 'headers': { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } }; // 调用API获取数据 var response = UrlFetchApp.fetch(url, options); // 解析响应为对象 var dataResponse = JSON.parse(response.getContentText()); Logger.log('响应状态码: ' + response.getResponseCode()); Logger.log('数据示例: ' + JSON.stringify(dataResponse[0])); /* 在这里处理返回的数据 */ }
额外说明
为什么这个方法有效?
Binance的API会对请求的User-Agent进行校验,避免无标识的自动化请求。添加一个标准的浏览器User-Agent,会让你的请求看起来像是来自正常的浏览器访问,从而绕过这个拦截。可以使用其他User-Agent吗?
当然,你可以使用任何主流浏览器的User-Agent字符串,比如Firefox、Safari的都可以,只要格式符合标准就行。后续测试建议
修改完代码后,先在脚本编辑器里运行一次确认正常,再通过表格的API Menu菜单调用,查看Logger里的响应状态码是否变成200,数据是否正常返回。
内容的提问来源于stack exchange,提问作者Agamemnon
相关产品推荐
相关产品推荐

