我正在尝试使用 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 errorhttr::GET("https://api.openaq.org/v1/countries", httr::verbose(ssl=TRUE)) 相同

    最佳答案

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

  • 你用 gnutls 而不是 openssl 编译。尝试: apt-get install libcurl4-openssl-dev
  • 你的libcurl确实过时了,不支持服务器要求的TLS版本。
  • 10-04 23:20