RCurl POST-запрос с заголовками и данными JSON

По сути, я хочу получить RCurl-эквивалент следующего вызова curl:

curl -H "AUTH-KEY: soanclCNdnLDcnlNc" -H "Content-Type: application/json" -X POST -d '{"documents":["http://localhost:3000/documents/2","http://localhost:3000/documents/4"]}' http://localhost:3000/documents/download?format=zip

Мне удавалось что-то получить от этого, но оно всегда было больше, чем то, что производил вызов curl, и не могло быть распаковано: и я не могу узнать, что это такое.

x= list(items=c("http://localhost:3000/documents/2", "http://localhost:3000/documents4"))
headers <- list('AUTH-KEY' = "soanclCNdnLDcnlNc", 'Accept' = 'application/json', 'Content-Type' = 'application/json')
postForm("http://localhost:3000/documents/download?format=zip", .opts=list(postfields=toJSON(x), httpheader=headers))

person crypts    schedule 18.12.2013    source источник
comment
(1) В вашем вызове curl у вас есть документы, но в вашей первой строке кода R у вас есть элементы. (2) Подтвердили ли вы, что toJSON предоставляет вам правильный контент?   -  person Thomas    schedule 18.12.2013
comment
Это как на самом деле просто ошибка в том, что я поместил это здесь. Оказалось, что я неправильно обрабатывал полученный контент. Я использовал стандартную функцию write() R для записи в файл вместо writeBin(), которая создавала правильный zip-файл, который я хотел. ура, хотя   -  person crypts    schedule 31.12.2013


Ответы (1)


Несмотря на то, что в настоящее время существуют более причудливые пакеты, RCurl по-прежнему честно выполняет свою работу.

В общем, чтобы переназначить в RCurl:

curl -H "AUTH-KEY: xxxx"  \
     -H "Content-Type: "application/x-www-form-urlencoded" \
     -d '{"key1": "value1","key2": "value2"}' \
     "https://httpbin.org/post"

(соответственно отрегулируйте заголовки и поля)

Ты используешь:

hdr=c(Authorization="xxxx", `Content-Type`="application/x-www-form-urlencoded")
flds='{"key1": "value1","key2": "value2"}'
postForm("https://httpbin.org/post",
        .opts=list(httpheader=hdr, postfields=flds))

Обратите внимание на обратные кавычки для Content-Type, чтобы избежать минуса.

person antonio    schedule 19.11.2016