2011-11-14 55 views
7

ROauth我搜索了並看到了一些關於該主題的問題,但我沒有發現任何與Windows直接相關的東西(我以前的帖子是針對Linux)。ROWS使用R

更具體地說,我試圖使用twitteR軟件包,但是我無法使Authentication進行工作。到目前爲止,我可以訪問其他機器,但是這次我需要完全停留在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() 
+0

什麼你的代碼是否會產生這個錯誤? – Andrie

回答

12

UPDATE 2013年5月

看到我一直看到人們提到這些我在Windows ssues,如果你運行你的[R腳本之前接下來,它會自動解決這個問題,而你需要做什麼都在這個帖子:

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

這將gloabally設置選項,將用於所有RCurl調用。

我會留下文的其餘部分作爲參考。


注意:這不是一個直接的解決方案,但它也太長評論或#rstats鳴叫......

讀取輸出,這個問題似乎與捲曲(因此包RCurl)。我可以重新創建一個不同的應用程序,它發生在我的Windows 7 64位專業版與R2.14.0使用RCurl_1.6-10了同樣的錯誤:

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網站。但你怎麼知道他們說的是實話?在你的系統的某個地方,你需要有一個可以確認它的文件,從可信來源獲得。

一種解決方案是讓該文件如下解決了問題(注意,不存在提供這些文件的其他網站,我已經使用了官方網站捲曲):

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是否允許用戶以某種方式添加這些捲曲參數,但這將是解決它的方法。

希望有所幫助。

託尼Breyal

附:另一種方法是可能的,並避免從cURL下載證書,但不建議您正在做的事情類型(嚴重的是,爲了您使用Twitter的目的,我會建議不要這麼大的時間):

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

UPDATE 2011:

這似乎是跨平臺(好,Ubuntu和視窗無論如何)的工作,並不需要你直接下載的SSL證書爲RCurl帶有他們已經:

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

感謝您的回覆!我實際上無法讓第一部分工作。我可以複製原始錯誤(您複製的),但是在下載文件並將其包含在getURL中後,出現以下錯誤。當我嘗試在ROauth包內的握手中包含文件時,我得到相同的錯誤:curlPerform中的錯誤(curl = curl,URL = url,postfields = fields,writefunction = reader $ update,: 錯誤設置證書驗證位置: CAfile:cacert.pem CApath:none – Btibert3

+0

@ Btibert3對不起,再試一次,「destfile =」中有一個輸入錯誤,現在應該可以正常工作了,假設它有效,我不知道如何設置捲曲選項cainfo在ROAuth中,所以你必須與維護人員交談,假設它的工作原理是:S –

+0

太棒了,那是完美的工作,甚至使用Twitter包使它工作!非常感謝! – Btibert3