2013-06-15 3 views
3

В этих документах Curl: http://curl.haxx.se/docs/manpage.html#-d перечислены многие логические опции.RCurl - Boolean Options

Как указать эти параметры в вызове postForm в RCURL? Например, как я могу указать флаг -sslv3?

Я попытался

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) 

Если кто-то может уточнить, как перевести локонов опции для вариантов RCurl, он бы оценил!

ответ

6

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_setopthttp://curl.haxx.se/libcurl/c/curl_easy_setopt.html.

CURLOPT_SSLVERSION

Pass длинный в качестве параметра для управления, какую версию SSL/TLS, чтобы попытаться использовать. Доступные опции:

CURL_SSLVERSION_DEFAULT

действие по умолчанию.Это попытается выяснить версию удаленного протокола SSL, то есть либо SSLv3, либо TLSv1 (но не SSLv2, который по умолчанию отключен с 7.18.1).

CURL_SSLVERSION_TLSv1

Force TLSv1

CURL_SSLVERSION_SSLv2

Force SSLv2

CURL_SSLVERSION_SSLv3

Force SSLv3

Он говорит, что мы должны были бы пройти длинный с ва lue 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.

Так что путаница в этом случае возникла из локонов программы, которая предположительно использует 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 .AN отрывок гласит:

Each of these and what it controls is described in the libcurl man(ual) page for curl_easy_setopt and that is the authoritative documentation. Anything we provide here is merely repetition or additional explanation.

The names of the options require a slight explanation. These correspond to symbolic names in the C code of libcurl. For example, the option url in R corresponds to CURLOPT_URL in C. Firstly, uppercase letters are annoying to type and read, so we have mapped them to lower case letters in R. We have also removed the prefix "CURLOPT_" since we know the context in which they option names are being used. And lastly, any option names that have a _ (after we have removed the CURLOPT_ prefix) are changed to replace the '_' with a '.' so we can type them in R without having to quote them. For example, combining these three rules, "CURLOPT_URL" becomes url and CURLOPT_NETRC_FILE becomes netrc.file. That is the mapping scheme.

+0

Чрезвычайно тщательный ответ. Благодаря! –

1

Попробуйте это (после рассмотрения примеров на? CurlOptions после на которые ссылается? PostForm :)

myOpts = curlOptions(sslv3 = TRUE) 
postForm(url, .opts = myOpts) 

Хотя я признаю, что я думал, что ваш код должен работать. Возможно, вам также придется публиковать номера версий. Существует также curlSetOpt, который может быть более «напористым».

+0

опция предупреждения! Предупреждение: В mapCurlOptNames (имена (.els), asNames = TRUE): Нераспознанные опции CURL: sslv3 –

Смежные вопросы