2011-07-18 9 views
6

Próbowałem następujący kod w R na oknach:użyciu Rcurl https

library(RCurl) 
postForm("https://www.google.com/accounts/ClientLogin/", 
    "email" = "[email protected]", 
    "Passwd" = "abcd", 
    "service" = "finance", 
    "source" = "Test-1" 
) 

ale idź następujący błąd:

Error in postForm() 
SL certificate problem, verify that the CA cert is OK. Details: 
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

Jak skonfigurować RCurl celu umożliwienia korzystania z HTTPS?

+1

bardziej odgadnięcia niż odpowiedzi, ale nie 'curlVersion() $ Protokołem m.in. "https"? Jeśli nie, to musisz zainstalować wersję biblioteki curl z obsługą ssl. Jak to zrobić, zależy od twojego systemu operacyjnego (wyjście 'sessionInfo()' może pomóc) –

Odpowiedz

9

Musisz zainstalować bibliotekę SSL.

  1. Do okien można dostać je tutaj: Download "OpenSSL for Windows" version 0.9.8k

  2. Rozpakuj do folderu tymczasowego, a następnie skopiować pliki "libeay32.dll" i "ssleay32.dll" z "bin" pod- folder do R \ biblioteka \ RCurl \ lib \ i386.

  3. Możesz również skopiować go do tego samego katalogu, co plik R.exe.

  4. Następnie sprawdź, czy masz dostęp do protokołu https:

    library(RCurl) 
    curlVersion()$protocol 
    ## [1] "tftp" "ftp" "telnet" "dict" "ldap" "http" "file" "https"  
    ## [9] "ftps" "scp" "sftp" 
    
  5. następnie zainstalować nowy zestaw poświadczeń plików:

    ca-bundle.crt można znaleźć na stronie: http://curl.haxx.se/ca/cacert.pem

    zmień nazwę/kopiuj na ca-bundle.crt

  6. Przetestuj za pomocą:

    getURL("https://www.google.com/accounts/ClientLogin/?service=finance&[email protected]&Passwd=abcd&source=Test-1", 
         cainfo = "path to R/library/RCurl/CurlSSL/ca-bundle.crt") 
    
+0

Dzięki! Bardzo ładnie wyjaśnione. – Arun

+0

@Mscha Vreeburg, Postępowałem zgodnie z Twoimi krokami, pojawia się ten błąd: Błąd w funkcji (typ, msg, asError = TRUE): certyfikat błędu ustawienia weryfikacji: CAfile: C:/Users/Documents/R/win-library /3.2/RCurl/CurlSSL/ca-bundle.crt Ścieżka: brak – user1471980

13

wystarczy dodać .opts = list (ssl.verifypeer = false) do zapytania

postForm("https://www.google.com/accounts/ClientLogin/", 
    "email" = "[email protected]", 
    "Passwd" = "abcd", 
    "service" = "finance", 
    "source" = "Test-1", 
    .opts = list(ssl.verifypeer = FALSE)) 
Powiązane problemy