我一直在玩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.
这对某人有用吗?..
答案 0 :(得分:2)
我有this issue,通过安装libcurl4-openssl-dev
并将Rcurl
包更新到最新版本(1.95)来解决问题
$ sudo apt-get install libcurl4-openssl-dev
$ R
> install.packages("RCurl")