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
它说我们需要通过一个 long with valueCURL_SSLVERSION_SSLv3
来规定 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
的 as.opts
传递给mapCurlOptNames
它将用于pmatch
find sslversion
。
公平地说,这一切的作者都在http://www.omegahat.org/RCurl/philosophy.htmlRCurl
中进行了解释,也位于. 摘录如下:/RCurl/inst/doc/philosophy.html
libcurl man(ual) page for curl_easy_setopt 中描述了其中的每一个及其控制的内容,这是权威文档。我们在此提供的任何内容都只是重复或补充说明。
选项的名称需要稍微解释一下。这些对应于 libcurl 的 C 代码中的符号名称。例如,R 中的选项 url 对应于 C 中的 CURLOPT_URL。首先,大写字母很难输入和阅读,因此我们将它们映射为 R 中的小写字母。我们还删除了前缀“CURLOPT_”,因为我们知道使用它们选项名称的上下文。最后,任何带有 _ 的选项名称(在我们删除 CURLOPT_ 前缀之后)都会更改为将 '_' 替换为 '.' 所以我们可以在 R 中输入它们而不必引用它们。例如,结合这三个规则,“CURLOPT_URL”变为 url,CURLOPT_NETRC_FILE 变为 netrc.file。那就是映射方案。