首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R的Windows上的ROauth

使用R的Windows上的ROauth
EN

Stack Overflow用户
提问于 2011-11-14 22:16:58
回答 1查看 6.5K关注 0票数 7

我搜索了一下,看到了一些关于这个主题的问题,但我没有找到任何与Windows直接相关的东西(我之前的帖子是针对Linux的)。

更具体地说,我想使用twitteR包,但是我不能让身份验证工作。到目前为止,我已经可以访问其他机器,但这次,我需要完全留在Windows中。我怎么才能避免这个问题呢?

下面是错误:

代码语言:javascript
复制
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

that....from :和生成twitteR包文档的代码

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-15 19:56:48

更新2013年5月

因为我一直看到人们在Windows上提到这些问题,如果你在运行R脚本之前执行以下操作,它应该会自动解决问题,而不需要在这篇文章中做任何其他事情:

代码语言:javascript
复制
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上为不同的应用程序重新创建相同的错误:

代码语言:javascript
复制
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官方网站):

代码语言:javascript
复制
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下载证书,但对于你正在做的事情类型,不建议这样做(说真的,对于你使用推特的目的,我建议不要这么大的时间):

代码语言:javascript
复制
x <- getURL(u, ssl.verifypeer = FALSE)

2011年更新:

这似乎可以跨平台工作(嗯,至少是Ubuntu和Windows ),并且不需要你直接下载SSL证书,因为RCurl已经提供了它们:

代码语言:javascript
复制
 x <- getURL(u, cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档