r-xml2在连接到政府网页时出现SSL错误



当我尝试使用巴西政府网页上的函数xml2::read_html()时,SSL证书上出现错误。当我尝试访问时

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笔记本上运行代码,我收到了同样的错误消息,所以我可以看到问题不在我的电脑上。

来自https://curl.haxx.se/docs/sslcerts.html:

证书验证

  1. 告诉libcurl不要验证对等方。使用libcurl,您可以使用curl_easy_topt(curl,CURLOPT_SSL_VERIFYPEER,FALSE(禁用此功能

使用curl命令行工具,可以使用-k/-unsecurity禁用此功能。

因此,从命令行(或终端(执行以下操作:

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

编辑:

实际上,按照这里的信息,选项181

#> 181             ssl_verifypeer             CURLOPT_SSL_VERIFYPEER  integer

应该是你尝试过但没有成功的。这可能是一个错误,因为它与从命令行运行的选项相同。

最新更新