Curl 代表一些东西http://daniel.haxx.se/docs/curl-vs-libcurl.html。这里的问题是您正在查看 curl 命令行工具的作用,而不是想询问 libcurl 库是如何实现的。
RCurl 使用 libcurl 库。这可以通过 api 访问。 api 中使用的“符号”在此处列出http://curl.haxx.se/libcurl/c/symbols-in-versions.html。我们可以将它们与RCurl列出的选项进行比较:
library(RCurl)
cInfo <- getURL("http://curl.haxx.se/libcurl/c/symbols-in-versions.html")
cInfo <- unlist(strsplit(cInfo, "\n"))
cInfo <- cInfo[grep("CURLOPT_", cInfo)]
cInfo <- gsub("([^[\\s]]*)\\s.*", "\\1", cInfo)
cInfo <- gsub("CURLOPT_", "", cInfo)
cInfo <- tolower(gsub("_", ".", cInfo))
listCurlOptions()[!listCurlOptions()%in%cInfo]
从上面我们可以看出,所有的 RCurl 选项都是从 libcurl api 符号派生的。这
CURLOPT_ 被删除 _ 被 . 替换并且字母被降级为小写。
接下来的问题是符号代表什么类型。我通常只看
php 库文档来发现这一点。 http://php.net/manual/en/function.curl-setopt.php 列表
CURLOPT_SSLVERSION The SSL version (2 or 3) to use. By default PHP will try to determine this itself, although in some cases this must be set manually.
作为整数类型。期望值 2 或 3。
您也可以查看curl_easy_setopt 手册页http://curl.haxx.se/libcurl/c/curl_easy_setopt.html。
CURLOPT_SSLVERSION
传递一个 long as 参数来控制尝试使用的 SSL/TLS 版本。可用的选项有:
CURL_SSLVERSION_DEFAULT
默认操作。这将尝试找出远程 SSL 协议版本,即 SSLv3 或 TLSv1(但不是 SSLv2,它在 7.18.1 中默认禁用)。
CURL_SSLVERSION_TLSv1
强制 TLSv1
CURL_SSLVERSION_SSLv2
强制 SSLv2
CURL_SSLVERSION_SSLv3
强制 SSLv3
它说我们需要传递一个值为CURL_SSLVERSION_SSLv3 的long 来规定sslv3。
CURL_SSLVERSION_SSLv3 的值是多少?我们可以查看RCurl:::SSLVERSION_SSLv3
> c(RCurl:::SSLVERSION_DEFAULT, RCurl:::SSLVERSION_TLSv1, RCurl:::SSLVERSION_SSLv2, RCurl:::SSLVERSION_SSLv3)
[1] 0 1 2 3
>
所以实际上 sslversion 的允许值是 0、1、2 或 3。
因此,这种情况下的混淆源于 curl 程序,该程序可能使用 libcurl api 以二进制方式实现它。
所以在这种情况下使用此选项的正确方法是:
postForm(url, .opts = list(sslversion = 3))
or
postForm(url, .opts = list(sslv = 3))
您可以使用较短的sslv,因为.opts 被传递给mapCurlOptNames,后者将使用pmatch
找到sslversion。
为了公平起见RCurl 的作者,这一切都在http://www.omegahat.org/RCurl/philosophy.html 中进行了解释,也位于/RCurl/inst/doc/philosophy.html。摘录如下:
其中的每一个及其控制的内容都在 libcurl 中进行了描述
curl_easy_setopt 的 man(ual) 页面,这是权威的
文档。我们在这里提供的任何东西都只是重复或
补充说明。
选项的名称需要稍微解释一下。这些
对应于 libcurl 的 C 代码中的符号名称。例如,
R 中的选项 url 对应于 C 中的 CURLOPT_URL。首先,
大写字母打字和阅读都很烦人,所以我们映射了
它们在 R 中变为小写字母。我们还删除了前缀
“CURLOPT_”,因为我们知道选项名称所在的上下文
正在使用。最后,任何带有 _ 的选项名称(在我们有
删除了 CURLOPT_ 前缀)更改为将 '_' 替换为 '.'
所以我们可以在 R 中输入它们而不必引用它们。例如,
结合这三个规则,“CURLOPT_URL”变成了 url 和
CURLOPT_NETRC_FILE 变为 netrc.file。这就是映射方案。