使用R的Windows上的ROauth

时间:2011-11-14 14:16:58

标签: r twitter oauth

我搜索了SO并看到了关于该主题的一些问题,但我没有发现任何与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 failed

编辑:从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()

1 个答案:

答案 0 :(得分:12)

2013年5月更新

看到我一直看到人们在Windows上提到这些问题,如果您在运行R脚本之前执行以下操作,它应该自动解决问题,而不需要在此帖子中执行任何其他操作:

library(RCurl) 
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))

这将全局设置选项,并将用于所有RCurl调用。

我将留下以下帖子的其余部分作为参考。


注意:这不是一个直接的解决方案,但它对于评论或#rstats推文也太长了......

读取输出,问题似乎是cURL(因此包RCurl)。我可以为使用RCurl_1.6-10的R2.14.0在Windows 7 x64 Pro上发生的不同应用程序重新创建相同的错误:

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是否允许用户以某种方式添加这些卷曲参数,但这将是解决它的方法。

希望有所帮助。

Tony Breyal

P.S。另一种方法是可行的,并且避免从cURL下载证书,但不推荐用于你正在做的事情的类型(严重的是,为了你使用twitter的目的,我建议不要这么大的时间):

x <- getURL(u, ssl.verifypeer = FALSE)

2011年更新:

这似乎适用于跨平台(好吧,无论如何都是Ubuntu和Windows),并且不需要您直接下载SSL证书,因为RCurl已经附带它们:

 x <- getURL(u, cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))