Linux下如何通过curl指定api.binance.com的自定义近邻IP访问以降低延迟并避免错误
Linux下如何通过curl指定api.binance.com的自定义近邻IP访问以降低延迟并避免错误
你遇到的问题本质是CloudFront(Binance用的CDN)的分发规则限制:直接访问IP时,请求没有携带正确的api.binance.com Host头,导致CDN无法识别对应的服务;同时SSL证书是绑定域名而非IP的,所以直接用IP走HTTPS会触发证书验证失败。下面给你两个实用的解决方法:
方法一:用curl的--resolve参数临时指定(推荐,无需修改系统配置)
这个参数可以让curl绕过DNS查询,直接把指定域名的某个端口请求解析到你找到的近邻IP,同时请求时会自动带上正确的Host头,SSL验证也会用域名来匹配证书,完美解决两个错误问题。
测试延迟的命令:
curl -o /dev/null -s -w 'Total: %{time_total}s\n' --resolve api.binance.com:443:18.238.65.94 "https://api.binance.com/api/v3/time"
获取接口内容的命令:
curl --resolve api.binance.com:443:18.238.65.94 "https://api.binance.com/api/v3/time"
参数格式说明:--resolve 域名:端口:目标IP,这里我们指定443端口(HTTPS默认端口),curl就会把api.binance.com:443的请求全部发往18.238.65.94,同时保持域名相关的请求头和SSL验证逻辑正常。
方法二:修改本地hosts文件永久生效(对所有应用生效)
如果希望所有访问api.binance.com的工具(不止curl)都使用这个近邻IP,可以修改系统的hosts文件,强制域名解析到指定IP:
- 编辑hosts文件:
sudo nano /etc/hosts
- 在文件末尾添加一行:
18.238.65.94 api.binance.com
- 保存退出(nano里按
Ctrl+O保存,Ctrl+X退出)
之后不管是curl还是其他程序访问api.binance.com,都会直接使用18.238.65.94这个IP,同时请求时的Host头和SSL验证都不会有问题,延迟也能保持在低水平。
补充说明为什么之前直接访问IP会报错
- HTTP请求返回403:CloudFront需要请求携带正确的Host头来匹配对应的分发规则,直接用IP请求时Host头是IP本身,CDN无法识别,所以拒绝访问。
- HTTPS请求证书错误:Binance的SSL证书是颁发给
*.binance.com域名的,不是颁发给IP的,curl验证证书时发现目标IP和证书绑定的域名不匹配,所以触发安全报错。
备注:内容来源于stack exchange,提问作者sirjay




