2011-11-14 16 views
7

Ho cercato SO e ho visto alcune domande pubblicate sull'argomento, ma non ho trovato nulla direttamente correlato a Windows (il mio post precedente era per Linux).ROauth su Windows utilizzando R

In particolare, mi sto impegnando a utilizzare il pacchetto twitteR, ma non riesco a far funzionare l'autenticazione. Fino ad ora, ho avuto accesso ad altre macchine, ma questa volta, ho bisogno di rimanere interamente all'interno di Windows. Come posso aggirare questo?

Ecco l'errore:

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 

EDIT: E il codice che genera che .... dalla documentazione del pacchetto 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

Cosa è il tuo codice che produce questo errore? – Andrie

risposta

12

UPDATE maggio 2013

Visto che continuo a vedere la gente menziona questi UESTIONI su Windows, se si fa la seguente prima di eseguire lo script R, si dovrebbe risolvere il problema automaticamente senza la necessità di fare qualsiasi altra cosa in questo post:

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

questo imposterà l'opzione gloabally e saranno utilizzato in tutte le chiamate RCurl.

Lascerò il resto del post qui sotto come riferimento.


NOTA: Questa non è una soluzione diretta, ma è anche troppo lungo per un commento o un Tweet #rstats ...

Leggendo l'uscita, il problema sembra essere con l'arricciatura (e quindi pacchetto RCurl). Posso ricreare lo stesso errore per una diversa applicazione, che mi succede su Windows 7 x64 Pro con R2.14.0 utilizzando 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 

Il codice di errore è lo stesso. Nel tuo caso significa che Twitter ti sta inviando un certificato per dirti che sono il vero sito web di Twitter. Ma come fai a sapere che stanno dicendo la verità? Da qualche parte nel tuo sistema devi avere un file che possa confermarlo, ottenuto da una fonte attendibile.

Una soluzione è quella di ottenere che il file come segue che risolve il problema (da notare, ci sono altri siti web che forniscono tali file, ho usato il sito ufficiale cURL):

download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem") 
x <- getURL(u, cainfo = "cacert.pem") 

non ho guardato gli interni di ROAuth (tutto ciò che è scritto in S3/S4/Reference-classi mi fa impazzire) ma a un certo punto avrebbe bisogno di impostare il parametro cainfo per superare questo problema (su Windows che è - sembra funzionare bene su Ubuntu per il mio esempio sopra). Non so se ROAuth consenta all'utente di aggiungere questi parametri di arricciatura in qualche modo ma quello sarebbe il modo di risolverlo.

La speranza aiuta un po '.

Tony Breyal

P.S.un altro metodo è possibile, ed evita di scaricare il certificato da cURL, ma non è raccomandato per il tipo di cosa si sta facendo (sul serio, per il vostro scopo di utilizzare Twitter, mi sento di raccomandare contro questo grande tempo):

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

UPDATE 2011:

Questo sembra funzionare su diverse piattaforme (beh, Ubuntu e Windows, in ogni caso) e non richiede di scaricare direttamente i certificati SSL come RCurl viene con loro già:

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

Grazie per la risposta approfondita! In realtà non riesco a far funzionare la prima parte. Posso replicare l'errore originale (che hai replicato), ma dopo aver scaricato il file e averlo incluso nel getURL, ottengo il seguente errore. Ottengo lo stesso errore quando tento di includere il file nell'handshake nel pacchetto ROauth: Errore in curlPerform (curl = curl, URL = url, postfields = campi, writefunction = reader $ update,: errore di impostazione dei percorsi di verifica del certificato: CAfile: cacert.pem CApath: nessuno – Btibert3

+0

@ Btibert3 Scusa amico, riprova, c'era un errore di battitura in "destfile =", dovrebbe funzionare bene ora. Supponendo che funzioni, non sono sicuro di come impostare l'arricciatura opzione cainfo in ROAuth, quindi dovrai parlare con il manutentore.Per supponendo che funzioni: S –

+0

Ottimo, che ha funzionato perfettamente.Aveva persino funzionato usando il pacchetto Twitter! Molte grazie! – Btibert3

Problemi correlati