我搜索了一下,看到了一些关于这个主题的问题,但我没有找到任何与Windows直接相关的东西(我之前的帖子是针对Linux的)。
更具体地说,我想使用twitteR包,但是我不能让身份验证工作。到目前为止,我已经可以访问其他机器,但这次,我需要完全留在Windows中。我怎么才能避免这个问题呢?
下面是错误:
Error in curlPerform(curl = curl, URL = url, postfields = fields, writefunction = reader$update, :
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failedthat....from :和生成twitteR包文档的代码
cred <- OAuthFactory$new(consumerKey = KEY,
consumerSecret = SECRET,
requestURL = "https://api.twitter.com/oauth/request_token",
accessURL = "https://api.twitter.com/oauth/access_token",
authURL = "https://api.twitter.com/oauth/authorize")
cred$handshake()发布于 2011-11-15 19:56:48
更新2013年5月
因为我一直看到人们在Windows上提到这些问题,如果你在运行R脚本之前执行以下操作,它应该会自动解决问题,而不需要在这篇文章中做任何其他事情:
library(RCurl)
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))这将设置全局选项,并将在所有RCurl调用中使用。
我将在下面留下这篇文章的其余部分作为参考。
注意:这不是一个直接的解决方案,但对于评论或#rstats tweet来说也太长了……
从输出中可以看出,问题似乎出在cURL (以及RCurl包)上。我可以使用RCurl_1.6-10在Windows7 x64专业版R2.14.0上为不同的应用程序重新创建相同的错误:
library(RCurl)
u <- "https://raw.github.com/tonybreyal/Blog-Reference-Functions/master/R/bingSearchXScraper/bingSearchXScraper."
x <- getURL(u)
#Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) :
# SSL certificate problem, verify that the CA cert is OK. Details:
#error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed错误代码相同。在你的例子中,这意味着Twitter正在向你发送一个证书,告诉你他们是真正的Twitter网站。但是你怎么知道他们说的是真的呢?在您的系统中的某个地方,您需要有一个可以确认它的文件,该文件是从可信来源获得的。
一种解决方案是获取该文件,如下所示即可解决此问题(注意,还有其他网站提供此类文件,我使用的是cURL官方网站):
download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")
x <- getURL(u, cainfo = "cacert.pem")我还没有研究过ROAuth的内部结构(用S3/S4/Reference-classes编写的任何东西都吓死我了),但在某些时候,它需要设置cainfo参数来解决这个问题(在Windows上,对于我上面的例子来说,似乎在Ubuntu上工作得很好)。我不知道ROAuth是否允许用户以某种方式添加这些卷曲参数,但这将是解决它的方法。
希望这能帮上点忙。
托尼·布雷亚尔
附注:另一种方法是可行的,可以避免从cURL下载证书,但对于你正在做的事情类型,不建议这样做(说真的,对于你使用推特的目的,我建议不要这么大的时间):
x <- getURL(u, ssl.verifypeer = FALSE)2011年更新:
这似乎可以跨平台工作(嗯,至少是Ubuntu和Windows ),并且不需要你直接下载SSL证书,因为RCurl已经提供了它们:
x <- getURL(u, cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))https://stackoverflow.com/questions/8122879
复制相似问题