curl中出错-SSL证书问题:无法获取本地颁发者证书

curl中出错-SSL证书问题:无法获取本地颁发者证书,r,ssl,curl,httr,R,Ssl,Curl,Httr,我很难用ping美国海军天文台API的GET调用。此请求以前有效,但现在由于未知原因失败 请求如下: library(httr) #ping API try(RETRY("GET", url = "http://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20)) #ERROR MESSAGE (request always ti

我很难用ping美国海军天文台API的GET调用。此请求以前有效,但现在由于未知原因失败

请求如下:

library(httr)

#ping API
try(RETRY("GET", url = "http://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))

#ERROR MESSAGE (request always times out with error)
#Error in curl::curl_fetch_memory(url, handle = handle): SSL certificate problem: #unable to get local issuer certificate
#Request failed [ERROR]. Retrying in 1 seconds...
我正在运行Rv3.5.1和RStudiov1.1.463。Curl是v3.2,httr是v1.3.1

我尝试的故障排除方法无效:

  • 仔细检查美国海军天文台API文档,确保请求仍然正确/最新(确实如此)
  • 安装此调用使用的旧版本R(v.3.4.4)(无更改)
  • 更新至RStudio的最新版本(v.1.1.463,无更改)
  • 此站点上列出的解决方案()未做任何更改。这是我能在网上找到的关于R中这个错误的唯一相关线程

有什么想法吗?非常感谢您的任何帮助或指向正确的方向

经过一番搜索,找到了答案。API从http->https切换,这导致SSL错误。通过在运行“GET”之前将此参数设置为httr进行修复:

因此,如果您像这样修改上述API调用,它将起作用:

library(httr)
httr::set_config(config(ssl_verifypeer = 0L))

#ping API
try(RETRY("GET", url = "https://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))

希望这对别人有帮助

我对这个网站也有同样的问题。我收到的错误是“
java.security.cert.CertPathValidatorException
:找不到证书路径的信任锚点”

美国国防部(DOD)的一些相关网站正在从
http
过渡到
https
。该网站于2018年11月底完成了转型。问题与DOD SSL证书没有由普通的受信任机构签名(检查Mozilla的根存储)有关。仅仅添加传统的可公开获得的国防部证书并不能解决这个问题


2019年1月31日,他们的服务台通知我,他们现在已经安装了商业认可的证书。重新测试我的代码后(删除一些安全旁路后),我不再有任何SSL错误,所有错误似乎都按预期工作。

网站现在可能需要https,并使用似乎不受普遍信任的证书签名者进行签名。因此,这可能是服务器端的一个变化,而不是您可以控制的任何东西。(如果我尝试访问URL,我会在Chrome中收到安全警告)。您可能需要手工处理SSL证书才能使其正常工作。谢谢您的反馈。希望您能帮助我理解-我在哪里使用SSL证书?这是在R之内还是其他地方?谢谢你的帮助!试着看看这些问题以寻求建议:看起来您只是在禁用证书检查,对吗?如果是这样,那就很难令人满意地解决这个问题了。。。
library(httr)
httr::set_config(config(ssl_verifypeer = 0L))

#ping API
try(RETRY("GET", url = "https://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))