2011-11-14 10 views
7

Busqué SO y vi algunas preguntas publicadas sobre el tema, pero no encontré nada directamente relacionado con Windows (mi publicación anterior fue para Linux).ROauth en Windows usando R

Más específicamente, me apetece usar el paquete twitteR, pero no puedo hacer que la Autenticación funcione. Hasta ahora, he tenido acceso a otras máquinas, pero esta vez, necesito permanecer completamente dentro de Windows. ¿Cómo puedo evitar esto?

Aquí está el error:

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: Y el código que genera que .... de la documentación del paquete de 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

Qué Cuál es tu código que produce este error? – Andrie

Respuesta

12

actualización de mayo de 2013

Al ver que sigo viendo a la gente mencionar estos i EMAS en Windows, si lo hace lo siguiente antes de ejecutar la secuencia de comandos R, que podrían resolver el problema de forma automática sin necesidad de que hacer nada más en este post:

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

Esto establecerá la opción gloabally y estarán utilizado en todas las llamadas RCurl.

Dejaré el resto de la publicación a continuación como referencia.


NOTA: Esto no es una solución directa, pero también es demasiado largo para un comentario o un tuit #rstats ...

Lectura de la salida, el problema parece ser con el enrollamiento (y de ahí el paquete RCurl). Puedo recrear el mismo error para una aplicación diferente, lo que me pasa en Windows 7 x64 Pro con R2.14.0 usando 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 

El código de error es el mismo. En tu caso, significa que Twitter te está enviando un certificado para decirte que es el verdadero sitio web de Twitter. ¿Pero cómo sabes que están diciendo la verdad? En algún lugar de su sistema necesita tener un archivo que pueda confirmarlo, obtenido de una fuente confiable.

Una solución es conseguir que el archivo de la siguiente que resuelve el problema (tenga en cuenta, hay otros sitios web que ofrecen este tipo de archivos, he utilizado el sitio web oficial cURL):

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

no he Miré las partes internas de ROAuth (cualquier cosa escrita en S3/S4/Reference-classes me asusta) pero en algún momento necesitaría establecer el parámetro cainfo para superar este problema (en Windows eso es - parece funcionar bien en Ubuntu para mi ejemplo anterior). No sé si ROAuth le permite al usuario agregar estos parámetros de curvatura de alguna manera, pero ese sería el camino a seguir para resolverlo.

Espero que ayude un poco.

Tony Breyal

P.S.otro método es posible, y evita descargar el certificado de cURL, pero no se recomienda para el tipo de cosas que está haciendo (en serio, para su propósito de usar Twitter, lo recomendaría contra este gran momento):

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

ACTUALIZACIÓN 2011:

Esto parece funcionar en todas las plataformas (bueno, Ubuntu y Windows en cualquier caso) y no le requiere para descargar directamente los certificados SSL como RCurl viene con ellos ya:

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

¡Gracias por la respuesta completa! De hecho, no puedo hacer funcionar la primera parte. Puedo replicar el error original (que ha replicado), pero después de descargar el archivo e incluirlo en el getURL, aparece el siguiente error. Obtengo el mismo error cuando intento incluir el archivo en el protocolo de enlace dentro del paquete ROauth: Error en curlPerform (curl = curl, URL = url, postfields = campos, writefunction = reader $ update,: certificado de configuración de errores verify locations: CAfile: cacert.pem CApath: none – Btibert3

+0

@ Btibert3 Lo siento amigo, inténtelo de nuevo, había un error tipográfico en "destfile =", debería funcionar bien ahora. Suponiendo que funcione, no estoy seguro de cómo se configuraría el rizo opción cainfo en ROAuth, por lo que tendrá que hablar con el responsable. Asumiendo que funciona así: S –

+0

Genial, funcionó perfectamente. Incluso lo hizo funcionar usando el paquete de Twitter! Muchas gracias! – Btibert3

Cuestiones relacionadas