httr / curl 中的 SSL 连接错误
SSL connect error in httr / curl
我正在尝试使用 httr
访问一个开放的 API,但没有成功。每当我尝试时:
httr::GET("https://api.openaq.org/v1/countries")
我收到以下错误:
Error in curl::curl_fetch_memory(url, handle = handle) :
SSL connect error
但是,与 https 的其他连接工作正常,例如
httr::GET("https://httpbin.org/get")
这是sessionInfo()
的输出:
R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.3 LTS
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8
[5] LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=en_CA.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
loaded via a namespace (and not attached):
[1] httr_1.0.0.9000 R6_2.1.2 tools_3.2.3 curl_0.9.5
在终端,如果我 运行 curl-config --version
我得到
libcurl 7.35.0
更新:我尝试过的东西
- 确认这是 Ubuntu 14.04
的最新版本的 libcurl3
- 使用
openssl
检查 ssl 证书,如 this answer
- uninstalled/reinstalled
curl
、RCurl
和 httr
- 确认此确实可以从终端运行:
curl -v "https://api.openaq.org/v1/countries"
我无法理解命令行 curl 是如何正常工作的,但是 curl
在 R 中失败了
更多更新 -- verbose
不起作用
我试图通过要求 httr
冗长来从 R 获取更多信息。它产生相同的错误:
httr::GET("https://api.openaq.org/v1/countries", httr::verbose())
Error in curl::curl_fetch_memory(url, handle = handle) :
SSL connect error
与 httr::GET("https://api.openaq.org/v1/countries", httr::verbose(ssl=TRUE))
相同
SSL 握手失败。一些潜在的原因:
- 您使用 gnutls 而不是 openssl 进行了编译。尝试:
apt-get install libcurl4-openssl-dev
.
- 你的libcurl确实过时了,不支持服务器要求的TLS版本。
解决了这个问题(在@Jeroen 和 richfitz 的帮助下)
首先我 运行 在终端中输入以下内容:
sudo apt-get install libcurl4-openssl-dev
然后在 R:
中卸载并重新安装 curl
install.packages("curl")
我正在尝试使用 httr
访问一个开放的 API,但没有成功。每当我尝试时:
httr::GET("https://api.openaq.org/v1/countries")
我收到以下错误:
Error in curl::curl_fetch_memory(url, handle = handle) :
SSL connect error
但是,与 https 的其他连接工作正常,例如
httr::GET("https://httpbin.org/get")
这是sessionInfo()
的输出:
R version 3.2.3 (2015-12-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.3 LTS
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8
[5] LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=en_CA.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
loaded via a namespace (and not attached):
[1] httr_1.0.0.9000 R6_2.1.2 tools_3.2.3 curl_0.9.5
在终端,如果我 运行 curl-config --version
我得到
libcurl 7.35.0
更新:我尝试过的东西
- 确认这是 Ubuntu 14.04 的最新版本的 libcurl3
- 使用
openssl
检查 ssl 证书,如 this answer - uninstalled/reinstalled
curl
、RCurl
和httr
- 确认此确实可以从终端运行:
curl -v "https://api.openaq.org/v1/countries"
我无法理解命令行 curl 是如何正常工作的,但是 curl
在 R 中失败了
更多更新 -- verbose
不起作用
我试图通过要求 httr
冗长来从 R 获取更多信息。它产生相同的错误:
httr::GET("https://api.openaq.org/v1/countries", httr::verbose())
Error in curl::curl_fetch_memory(url, handle = handle) :
SSL connect error
与 httr::GET("https://api.openaq.org/v1/countries", httr::verbose(ssl=TRUE))
SSL 握手失败。一些潜在的原因:
- 您使用 gnutls 而不是 openssl 进行了编译。尝试:
apt-get install libcurl4-openssl-dev
. - 你的libcurl确实过时了,不支持服务器要求的TLS版本。
解决了这个问题(在@Jeroen 和 richfitz 的帮助下)
首先我 运行 在终端中输入以下内容:
sudo apt-get install libcurl4-openssl-dev
然后在 R:
中卸载并重新安装curl
install.packages("curl")