2011-07-18 42 views
6

我試着在R於窗口下面的代碼:使用Rcurl以https

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

但去以下錯誤:

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 

如何設置RCurl允許使用HTTPS的?

+1

更多的猜測不是一個答案,但確實'curlVersion()$ protocol'包括「HTTPS」?如果沒有,那麼你需要安裝一個帶有ssl支持的curl庫版本。如何做到這一點取決於你的操作系統('sessionInfo()'的輸出可能會有幫助) –

回答

9

您需要安裝SSL庫。

  1. 對於windows,你可以得到一個在這裏:Download "OpenSSL for Windows" version 0.9.8k

  2. 解壓縮到一個臨時文件夾,並從「箱」的子文件複製「的libeay32.dll」和 「ssleay32.dll」文件夾複製到R \ library \ RCurl \ lib \ i386。

  3. 也可以將它複製到與R.exe相同的目錄中。

  4. 然後檢查是否有訪問https協議:

    library(RCurl) 
    curlVersion()$protocol 
    ## [1] "tftp" "ftp" "telnet" "dict" "ldap" "http" "file" "https"  
    ## [9] "ftps" "scp" "sftp" 
    
  5. 然後再安裝一套新的證書文件:http://curl.haxx.se/ca/cacert.pem

    CA-bundle.crt可以在這裏找到

    重命名/複製到ca-bundle.crt

  6. 用此測試:

    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

謝謝!非常好的解釋。 – Arun

+0

@Mscha Vreeburg,我跟着你的步驟,我得到這個錯誤:函數錯誤(類型,msg,asError = TRUE): 錯誤設置證書驗證位置: CAfile:C:/ Users/Documents/R/win-library /3.2/RCurl/CurlSSL/ca-bundle.crt CApath:none – user1471980

13

只需添加.opts =名單(ssl.verifypeer = FALSE)到您的查詢

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