xml2 выдает ошибку SSL при подключении к правительственной веб-странице - PullRequest
0 голосов
/ 26 апреля 2020

Я получаю сообщение об ошибке в SSL-сертификатах, когда пытаюсь использовать функцию xml2::read_html() на веб-странице правительства Бразилии. Когда я пытаюсь получить доступ к

page = xml2::read_html("https://www.gov.br/planalto/pt-br/acompanhe-o-planalto/discursos")

, я получаю следующую ошибку:

Error in open.connection(x, "rb") : 
SSL certificate problem: unable to get local issuer certificate

Я нашел другой вопрос SO с 3 возможными решениями:

httr::set_config(config(ssl_verifypeer = 0L)) #1
httr::set_config(config(ssl_verifypeer = FALSE)) #2
Sys.setenv(LIBCURL_BUILD="winssl") #3

Ни один из они решили мою проблему, затем я попытался запустить код на ноутбуке Kaggle и получил то же сообщение об ошибке, чтобы увидеть, что проблема не на моем P C.

1 Ответ

0 голосов
/ 26 апреля 2020

из https://curl.haxx.se/docs/sslcerts.html:

Проверка сертификата

...

  1. Скажите libcurl не проверять одноранговый узел , С помощью libcurl вы отключите это с помощью curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, FALSE);

С помощью инструмента командной строки curl вы отключите это с -k / - insecure.

Итак, из командной строки (или терминала) работает следующее:

curl -k https://www.gov.br/planalto/pt-br/acompanhe-o-planalto/discursos

следующее, как обходной путь, также работает (с использованием библиотеки curl):

url <- "https://www.gov.br/planalto/pt-br/acompanhe-o-planalto/discursos"
curl::handle_setopt(h, ssl_verifyhost = 0, ssl_verifypeer=0)
curl::curl_download(url=url, destfile = "file_test.html", handle = h)

Я не смог найти способ установить опцию небезопасный в опциях пакета xml2, что было бы правильным ответом на этот вопрос.

Как ни странно следующее также «работает», но только для загрузки файла html, для его непосредственного разбора, не повезло.

curl::handle_setopt(h, ssl_verifyhost = 0, ssl_verifypeer=0)
xml2::download_html(url, handle = h)
xml2::read_xml(url, handle = h) #doesnt work
xml2::read_html(url, handle = h) #doesnt work

edit:

на самом деле, следуя информации здесь , опция 181

#> 181             ssl_verifypeer             CURLOPT_SSL_VERIFYPEER  integer

должна быть тем, что вы пробовали и не работали. Может быть ошибка, так как это тот же параметр, который работает из командной строки.

...