我知道那里有很多类似的问题,例如
但是我在寻找答案的过程中遇到困难,无法将其应用于我的具体情况。这是我的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)获取并存储一个适当的某处的证书。
对this question的回答建议(对于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给定选项的文档,请使用curl_docs。
我将如何实践该建议?
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_verifystatus=0
一样,这是我看到的唯一其他ssl_*
选项。
如果我想正确地做事情而不忽略这些问题。我将如何处理(1)确定所需的证书,(2)在系统上安装/在httr
中使用它(我在Linux PopOS 18.04上),(3)如果与网站维护者保持一致地通信,他们应该更新他们的证书吗?
我使用的是config
错误。这似乎有效:
res <- http_status(GET(url,config(ssl_verifypeer=0)))
我仍然会对更原则的解决方案感兴趣(即,弄清楚如何安装和部署正确的证书)。