【问题标题】:SSL connect error in httr / curlhttr / curl中的SSL连接错误
【发布时间】:2016-01-28 07:56:16
【问题描述】:

我正在尝试使用 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
  • 卸载/重新安装curlRCurlhttr
  • 确认此确实可以从终端工作:

curl -v "https://api.openaq.org/v1/countries"

我无法理解命令行 curl 如何正常工作,但 R 中的 curl 失败

更多更新 -- 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))相同

【问题讨论】:

  • 我也遇到了这个问题。在命令行使用 curl 似乎可以正常工作,但不是来自 R。根据curl_version(),我使用的是 7.22.0 版本。
  • 我无法重现此内容。这个错误还在发生吗?
  • 我怀疑 SSLv3 有问题。你能包括curl::curl_fetch_memory("https://api.openaq.org/v1/countries", new_handle(verbose=T))的输出吗?

标签: r httr


【解决方案1】:

解决了这个问题(在 @Jeroen 和 richfitz 的帮助下)

首先我在终端中运行了以下命令:

sudo apt-get install libcurl4-openssl-dev

然后在 R 中卸载并重新安装curl

install.packages("curl")

【讨论】:

  • 谢谢你,它帮助了我。
【解决方案2】:

SSL 握手失败。一些潜在的原因:

  • 您使用 gnutls 而不是 openssl 编译。试试:apt-get install libcurl4-openssl-dev
  • 您的 libcurl 确实过时了,不支持服务器所需的 TLS 版本。

【讨论】:

  • 是的,我可以确认这是由于使用 GnuTLS 而不是 OpenSSL 的一些问题。问题出现在我的带有 curl 包 0.9.5 和 curl 版本 7.22.0 的笔记本电脑上,其中curl_version()$ssl_version 显示它正在使用 GnuTLS/2.12.14。在另一台具有相同 curl 包和版本但使用 OpenSSL/1.0.1 的机器上似乎一切正常。我想知道为什么。
猜你喜欢
  • 1970-01-01
  • 2016-08-28
  • 2016-08-15
  • 1970-01-01
  • 2019-02-13
  • 2018-06-16
  • 2014-03-20
  • 2014-12-16
  • 2017-07-16
相关资源
最近更新 更多