Google Sheets调用Binance期权API遭地域限制错误的解决方法
解决Google Apps Script调用Binance期权API的地域限制错误
首先得先修正你代码里的一个关键小错误:参数变量没有正确替换。你当前的URL里直接把BaceAsset当成字符串写进去了,导致实际请求的参数是underlyingAsset=BaceAsset,而不是你传入的BTC或ETH值。先把这个问题修复,代码改成模板字符串的形式会更靠谱:
function DownLoad_options_OI(BaceAsset) { // 用模板字符串替换变量,同时把参数分隔符换成标准的&(Binance也支持;,但&更符合URL规范) const url = `https://eapi.binance.com/eapi/v1/openInterest?underlyingAsset=${BaceAsset}&expiration=230113`; const 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' } }; const response = UrlFetchApp.fetch(url, options); return response.getContentText(); }
接下来聊聊地域限制的问题:Google Apps Script的执行服务器IP地址大概率被Binance的风控系统判定为受限地区了,而你本地浏览器的IP是在允许访问的范围内,所以才会出现浏览器能正常请求,但脚本不行的差异。通过添加浏览器的User-Agent头,让请求更贴近正常浏览器的行为,很多时候就能绕过这个限制。
如果加了User-Agent还是不行,可以试试这两个进阶方案:
- 使用代理服务器:在
options里配置代理,比如:
注意要选支持HTTPS且IP在Binance允许地区的代理。const options = { muteHttpExceptions: true, headers: { 'User-Agent': '你的浏览器UA' }, proxyUrl: 'http://你的代理地址:端口' }; - 先验证请求URL是否正确:在
UrlFetchApp.fetch前加一行Logger.log(url);,查看执行日志确认URL里的underlyingAsset参数确实是你传入的BTC/ETH,避免参数替换错误的问题。
小提示:Binance的API参数分隔符推荐用
&而非;,虽然部分场景下;也能被识别,但遵循标准URL格式能减少潜在的解析问题。
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

