quantmod包getSymbols调用报错:5次尝试后无法建立会话
报错排查思路
这个报错是quantmod::getSymbols抓取雅虎财经数据时,后台请求会话连续5次创建失败触发的,和代码语法无关,按以下优先级排查:
- 先验证底层请求链路是否正常
不要直接信任全量更新的包,Microsoft OpenR自带的预编译依赖经常和CRAN最新版的网络请求包存在兼容问题。先卸载curl、httr、httr2三个包,重新安装对应平台的二进制版本(Windows下执行install.packages("curl", type = "win.binary")即可),安装完成后单独运行curl::curl_fetch_memory("https://finance.yahoo.com")测试连通性,如果报SSL证书错误,同步更新系统根证书后再测。 - 核对quantmod版本适配性
你提到的4月故障是雅虎财经调整了接口鉴权规则导致的,对应修复是在quantmod 0.4.26正式版上线的。先执行packageVersion("quantmod")确认版本:如果版本低于0.4.26就升级到正式版;如果装的是GitHub上的开发版,直接回退到0.4.26正式版,开发版目前存在会话创建逻辑的bug,会复现这个报错。 - 排查网络拦截问题
新设备如果默认开启系统代理、VPN,或是处于公司内网防火墙环境下,R进程的请求会被拦截导致会话创建超时。先临时关闭代理和防火墙,执行options(download.file.method = "wininet")(Windows系统)/options(download.file.method = "libcurl")(Mac/Linux系统)指定R的下载方法后再测试。 - 处理OpenR本身的兼容冲突
Microsoft OpenR默认开启的多线程fork、会话沙箱机制,会和quantmod创建后台独立请求会话的逻辑冲突。可以先在官方CRAN版本的R环境下用同版本包运行相同代码,如果能正常跑通,就打开OpenR配置文件,将Revo.useForkedParallel参数设置为FALSE,关闭多进程隔离逻辑后重启RStudio再测试。
快速定位问题层级可以先跑最小测试代码,跳过getSymbols的封装逻辑直接请求接口:
library(httr) test_res <- GET("https://query1.finance.yahoo.com/v8/finance/chart/AOR?range=1mo&interval=1d") print(status_code(test_res))
如果返回值不是200,问题出在网络/请求依赖层;如果返回200,问题出在quantmod和OpenR的兼容层。
内容的提问来源于stack exchange,提问作者Gerald Morrison
相关产品推荐
相关产品推荐

