这些Curl:http://curl.haxx.se/docs/manpage.html#-d列出了许多布尔选项。
如何在postForm调用RCurl中指定这些选项?例如,如何指定--sslv3 3标志?
我试过了
postForm(url, .opts = list(sslv3=TRUE))但收到了错误:
Warning message:
In mapCurlOptNames(names(.els), asNames = TRUE) :
Unrecognized CURL options: sslv3提前谢谢。
溶液
通过一些尝试和错误,我发现这是可行的:
options(RCurlOptions = list(sslversion=3))
postForm(url)如果有人能够澄清如何将Curl选项转换为RCurl选项,它将不胜感激!
发布于 2013-06-15 10:18:39
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符号派生出来的。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手册页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来规定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
> 因此,实际上So版本的允许值是0、1、2或3。
因此,在这种情况下,混乱产生于curl程序,它可能使用libcurl以二进制方式实现这一点。
因此,在本例中使用此选项的正确方法是:
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 .An节选中)中对此进行了解释:
在curl_easy_setopt的libcurl (Ual)页面中描述了其中的每一个以及它控制的内容,这是权威的文档。我们在这里提供的一切只是重复或额外的解释。 这些选项的名称需要稍作解释。它们对应于libcurl的C代码中的符号名。例如,R中的选项url对应于C中的CURLOPT_URL。首先,大写字母很难键入和读取,因此我们在R中将它们映射到小写字母。我们还删除了前缀"CURLOPT_“,因为我们知道使用它们选项名称的上下文。最后,任何具有_(在我们删除CURLOPT_前缀之后)的选项名都会被更改为用'.‘替换'_’。所以我们可以在R中输入它们,而不必引用它们。例如,结合这三条规则,"CURLOPT_URL“变成url,CURLOPT_NETRC_FILE变成netrc.file。这就是映射方案。
发布于 2013-06-15 02:23:17
在被postForm引用后(在查看了?curlOptions上的示例之后)尝试此选项:)
myOpts = curlOptions(sslv3 = TRUE)
postForm(url, .opts = myOpts)虽然我承认我认为你的代码应该有效。您可能还需要张贴版本号。还有一个curlSetOpt可能更“自信”。
https://stackoverflow.com/questions/17119449
复制相似问题