RCurl(或httr) - 指定证书信息

时间:2014-11-05 09:37:43

标签: r rcurl httr

我一直在玩httr和RCurl一段时间,并且在努力指定一些证书信息。

我有一个Curl CLI命令可以很好地登录到使用自签名证书进行身份验证的网站(以及uname / pwd),它看起来像这样......

curl -k -q -v --cert "../certs/foobar.pem" https://signon.foobar.com/certlogin -d "username=foo&password=bar" -H "X-Application: Curltest"

这会将我登录到foobar.com并返回会话令牌。

如果我使用相应的.crt证书文件并使用--key选项添加密钥,则该命令有效。

我正在尝试使用RCurl或httr执行相同的操作并继续收到指示证书错误的错误。请记住,我知道证书是正常的(因为CLI命令有效)我认为这是因为我在RCurl中错误地指定了证书。

所以,快速问题......

如何在RCurl或httr中重现上面给出的CURL命令?

BTW这是在Ubuntu上 - 所以不应该与很多人在Mac OS X 10.9 +上的问题有关

非常感谢

Eluxoso (第一次海报 - 很好......!)

这是我的(可能非常不优雅且肯定无法运作)代码

RCurl:

Library(RCurl)
url <- "https://signon.foobar.com/certlogin"
uname <- "foo"
pswd <-"bar"
headers <- list("X-Application" = "Curltest")
opts=curlOptions(verbose=TRUE, 
                 httpheader=headers, 
                 cainfo="../certs/foobar.pem", 
                 ssl.verifypeer=FALSE)
postForm(url, 
         "username" = uname, "password"=pswd,
         .opts=opts,
         style='POST'
)

HTTR:

library(httr)
cafile="../certs/foobar.pem"
resp<-POST("https://signon.foobar.com/certlogin", 
           body = list(username="foo", password = "bar"),
           add_headers("X-Application" = "Curltest" ), 
           verbose(),
           encode = "form",
           config(cainfo = cafile, ssl.verifypeer=FALSE))
content(resp,"text")

使用了cert的完整路径名后,尽管CURL CLI命令正常工作,我仍然得到相同的服务器响应。 在HTTP请求中,我注意到了这一点:

SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.

这对某人有用吗?..

1 个答案:

答案 0 :(得分:2)

我有this issue,通过安装libcurl4-openssl-dev并将Rcurl包更新到最新版本(1.95)来解决问题

$ sudo apt-get install libcurl4-openssl-dev
$ R
> install.packages("RCurl")