当我尝试使用巴西政府网页上的函数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:
证书验证
- 告诉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
应该是你尝试过但没有成功的。这可能是一个错误,因为它与从命令行运行的选项相同。