Ошибка SSL-соединения в httr / curl

Я пытаюсь получить доступ к открытому API с httr и не везет. Всякий раз, когда я пытаюсь:

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

обновления: вещи, которые я пробовал

  • подтвердил, что это самая последняя версия libcurl3 для Ubuntu 14.04
  • проверил SSL-сертификат, используя openssl как в этом ответе
  • деинсталлировать / переустановил curl, RCurl а также httr
  • подтвердил, что это работает с терминала:

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

Я не могу понять, как curl командной строки работает нормально, но curl в R не получается

больше обновлений - verbose не работает

Я пытался получить больше информации от R, спрашивая httr быть многословным. Выдает одинаковую ошибку:

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))

3 ответа

Решение

Рукопожатие SSL не удается. Некоторые потенциальные причины:

  • Вы скомпилированы с gnutls вместо openssl. Пытаться: apt-get install libcurl4-openssl-dev,
  • Ваш libcurl действительно устарел и не поддерживает требуемую сервером версию TLS.

Решил это (с помощью @Jeroen и richfitz)

Сначала я запустил в терминале следующее:

sudo apt-get install libcurl4-openssl-dev

затем удален и переустановлен curl в R:

install.packages("curl")

Я использую R-4.3.1 и работаю в корпоративной сети с перехватом SSL. Я столкнулся с этой «ошибкой SSL-соединения» и вернулся к использованию install.packages("some_package", Method="wininet"). Wininet работает, но немного медленно. Вот мой новый обходной путь:

  • Удален обходной путь wininet для возврата к libcurl по умолчанию.
  • Добавил следующую строку в мой .Rprofile
    • Sys.setenv(R_LIBCURL_SSL_REVOKE_BEST_EFFORT=TRUE)

Я узнал об этом из следующих ссылок:

Надеюсь, это поможет!

Другие вопросы по тегам