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 получены из символов API 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
справочную страницу 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 со значением 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
>
Так что на самом деле допустимые значения для sslversion — 0,1,2 или 3.
Таким образом, путаница в этом случае возникла из-за программы curl, которая предположительно использует API-интерфейс 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
. Выдержка гласит:
Каждый из них и то, что они контролируют, описаны на справочной странице libcurl для curl_easy_setopt, и это авторитетная документация. Все, что мы приводим здесь, является просто повторением или дополнительным объяснением.
Названия опций требуют небольшого пояснения. Они соответствуют символическим именам в C-коде libcurl. Например, опция url в R соответствует CURLOPT_URL в C. Во-первых, прописные буквы раздражают при вводе и чтении, поэтому мы сопоставили их с строчными буквами в R. Мы также удалили префикс «CURLOPT_», поскольку мы знаем контекст, в котором используются имена опций. И, наконец, любые имена опций, которые имеют _ (после того, как мы удалили префикс CURLOPT_), изменены, чтобы заменить '_' на '.' поэтому мы можем напечатать их в R, не заключая их в кавычки. Например, при объединении этих трех правил «CURLOPT_URL» становится URL-адресом, а CURLOPT_NETRC_FILE становится netrc.file. Это схема отображения.
person
user1609452
schedule
15.06.2013