我知道有很多类似的问题,例如
- 无法使用CURL获取本地颁发者证书
- 使用MailChimp';的SSL错误;s API
但我很难找到答案并将其应用于我的具体案例。这是我的MCVE:
library(httr)
url <- "http://www.ece.mcmaster.ca/~shirani/"
res <- try(http_status(GET(url,timeout(30))))
curl::curl_fetch_memory(url,handle=handle(中的错误:SSL证书问题:无法获取本地颁发者证书
我确信这意味着远程Web服务器正在使用我的系统无法识别的证书。我认为有两种解决方案,(1(告诉httr
/RCurl
/curl忽略问题并在不安全模式下操作(命令行标志-k
/--insecure
(或(2(获取并存储适当的证书。
设置"不安全"选项/忽略问题
这个问题的答案建议(对于PHP(
使用
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1)
和curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
?httr:config()
建议
通常,您只需要使用此函数来设置CURL选项(如果还没有有用的包装器(函数,如set_cookies、add_headers或证明…是真实的要有效地使用此功能,需要CURL知识和CURL选项。使用httr_options查看可用选项的完整列表。查看libcurl文档对于给定的选项,请使用curldocs。
如何将此建议付诸实践?
httr_options()
提供
206 ssl_verifyhost CURLOPT_SSL_VERIFYHOST integer
207 ssl_verifypeer CURLOPT_SSL_VERIFYPEER integer
但是
res <- try(http_status(GET(url,timeout(max_time),
config=list(ssl_verifyhost=0, ssl_verifypeer=0))))
给出了相同的错误(包括我看到的唯一其他ssl_*
选项ssl_verifystatus=0
(。
获得正确的证书,或者麻烦网站维护人员
如果我宁愿正确地做事,而不忽视问题。我将如何着手(1(确定我需要什么证书,(2(在我的系统上安装它/在httr
中使用它(我在Linux PopOS 18.04上(,(3(如果网站维护人员应该更新他们的证书,我将如何与他们进行一致通信?
我错误地使用了config
。这似乎奏效了:
res <- http_status(GET(url,config(ssl_verifypeer=0)))
我仍然对一个更有原则的解决方案感兴趣(即,弄清楚如何安装和部署正确的证书(。