quantmod - SSL:无法在 R 中获取本地颁发者证书
quantmod - SSL: unable to get local issuer certificate in R
我正在尝试使用 R 中的 quantmod
包从雅虎获取财务数据。它在我的个人笔记本电脑(Mac 和 Win)上完美运行。但是我不能让它在我的工作电脑(Win7)上运行。
我的代码是:
getSymbols("JPM", src = "yahoo")
请注意,它只在我公司的笔记本电脑上不起作用。
错误代码如下:
Error in curl::curl_download(cu, tmp, handle = h) :
SSL certificate problem: unable to get local issuer certificate
我尝试通过以下方式解决问题:
安装httr
包
删除curl
、quantmod
并重新安装
更新到最新版本的 R、RStudio、curl
、httr
、RCurl
和 quantmod
安装openssl
包
设置ssl_verifypeer = 0L
在getSymbols
前添加以下内容
options(download.file.method = "wget", download.file.extra = c("--no-check-certificate"))
不幸的是,上述 none 有效。顺便说一句,从 google 财务工作中获取数据,但 Google 每个请求仅提供约 4000 条记录。
我认为我们公司对 SSL 有一些限制,但我完全可以访问以 https://
开头的网站
此外,以下代码有效:
library('httr')
content(GET('https://www.linkedin.com/in/lillyzhu'))
和
devtools::install_github
我花了一周的时间来解决这个问题,但我没有取得任何进展。现在,我想知道是否可以修复它?任何想法都会有所帮助!
感谢所有的贡献者,祝你们一切顺利!
附录:libcurlVersion()
的输出
[1] "7.40.0"
attr(,"ssl_version")
[1] "OpenSSL/1.0.0o"
attr(,"libssh_version")
[1] "libssh2/1.4.3"
attr(,"protocols")
[1] "dict" "file" "ftp"
[4] "ftps" "gopher" "http"
[7] "https" "imap" "imaps"
[10] "ldap" "pop3" "pop3s"
[13] "rtmp" "rtsp" "scp"
[16] "sftp" "smtp" "smtps"
[19] "telnet" "tftp"
如果您需要我的笔记本电脑的任何其他信息,请随时告诉我。
更新:我在没有登录 VPN 的情况下在我公司的笔记本电脑上测试了该功能,它可以正常工作。那么有什么想法让它在 VPN 中工作吗?
问题是因为 cURL
默认使用 OpenSSL
。可以通过
安装特殊版本的 cURL
来固定使用 winSSL
Sys.setenv(LIBCURL_BUILD="winssl")
install.packages("https://github.com/jeroen/curl/archive/master.tar.gz", repos = NULL)
请参考这个link:
该错误通常是由过时或丢失的 CA 根证书捆绑引起的,但也可能在远程服务器使用自签名证书时发生。在任何一种情况下,cURL 都无法验证远程服务器的证书并引发错误。
您可以使用以下方式禁用验证证书的要求:
library(httr)
httr::set_config(config(ssl_verifypeer = FALSE))
但是不推荐这样做,因为它会产生安全漏洞。
我正在尝试使用 R 中的 quantmod
包从雅虎获取财务数据。它在我的个人笔记本电脑(Mac 和 Win)上完美运行。但是我不能让它在我的工作电脑(Win7)上运行。
我的代码是:
getSymbols("JPM", src = "yahoo")
请注意,它只在我公司的笔记本电脑上不起作用。
错误代码如下:
Error in curl::curl_download(cu, tmp, handle = h) :
SSL certificate problem: unable to get local issuer certificate
我尝试通过以下方式解决问题:
安装
httr
包删除
curl
、quantmod
并重新安装更新到最新版本的 R、RStudio、
curl
、httr
、RCurl
和quantmod
安装
openssl
包设置
ssl_verifypeer = 0L
在
前添加以下内容getSymbols
options(download.file.method = "wget", download.file.extra = c("--no-check-certificate"))
不幸的是,上述 none 有效。顺便说一句,从 google 财务工作中获取数据,但 Google 每个请求仅提供约 4000 条记录。
我认为我们公司对 SSL 有一些限制,但我完全可以访问以 https://
开头的网站此外,以下代码有效:
library('httr')
content(GET('https://www.linkedin.com/in/lillyzhu'))
和
devtools::install_github
我花了一周的时间来解决这个问题,但我没有取得任何进展。现在,我想知道是否可以修复它?任何想法都会有所帮助!
感谢所有的贡献者,祝你们一切顺利!
附录:libcurlVersion()
[1] "7.40.0"
attr(,"ssl_version")
[1] "OpenSSL/1.0.0o"
attr(,"libssh_version")
[1] "libssh2/1.4.3"
attr(,"protocols")
[1] "dict" "file" "ftp"
[4] "ftps" "gopher" "http"
[7] "https" "imap" "imaps"
[10] "ldap" "pop3" "pop3s"
[13] "rtmp" "rtsp" "scp"
[16] "sftp" "smtp" "smtps"
[19] "telnet" "tftp"
如果您需要我的笔记本电脑的任何其他信息,请随时告诉我。
更新:我在没有登录 VPN 的情况下在我公司的笔记本电脑上测试了该功能,它可以正常工作。那么有什么想法让它在 VPN 中工作吗?
问题是因为 cURL
默认使用 OpenSSL
。可以通过
cURL
来固定使用 winSSL
Sys.setenv(LIBCURL_BUILD="winssl")
install.packages("https://github.com/jeroen/curl/archive/master.tar.gz", repos = NULL)
请参考这个link:
该错误通常是由过时或丢失的 CA 根证书捆绑引起的,但也可能在远程服务器使用自签名证书时发生。在任何一种情况下,cURL 都无法验证远程服务器的证书并引发错误。
您可以使用以下方式禁用验证证书的要求:
library(httr)
httr::set_config(config(ssl_verifypeer = FALSE))
但是不推荐这样做,因为它会产生安全漏洞。