Ошибка 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)
Я узнал об этом из следующих ссылок:
- https://github.com/rstudio/rstudio/issues/10163#issuecomment-1193316767
- https://github.com/rstudio/rstudio/issues/10163#issuecomment-1207356113
Надеюсь, это поможет!