Как установить тип содержимого в запросе POST в R?

Мне нужно отправить запрос по почте. Проблема в том, что приложение, которое предоставляет API как веб-сервис, установило Content-Type на «text / plain». Я пробовал пакеты RCurl и httpRequest, но не мог понять, как установить тип содержимого. Я попытался напрямую отправить постзапрос на URL-адрес, у которого не было этого типа содержимого, после чего postForm сработал. Здесь есть помощь?

РЕДАКТИРОВАТЬ: Я постараюсь объяснить, что мне здесь нужно делать. У меня есть URL. Мне нужно сделать POST-запросы к нему, передав ему некоторые параметры примерно так

POST to "url/agents/where/agent?="Smith"

Это то, что вы набираете, если используете расширение консоли REST в Chrome для выполнения вызовов веб-сервисов. Мне нужно сделать это из R, установив для типа содержимого значение «текст / простой».

Я пробовал вот что,

postForm("url/agents/get/all")

Это работает как шарм, как, скажем, в нашем случае вызов веб-службы для вызова всех агентов не требует, чтобы тип содержимого был «текст / простой», а также не требует передачи ему каких-либо параметров (например, никакого конкретного агента назовите как хочу их всех). Думаю, я понял, как передать параметр, задав пары значений имени в списке в .opts. Я не могу понять, как установить тип содержимого.

Я пробовал это, но это не удалось,

postForm("url/agents/where",
         .opts = list(postfields = toJSON(list("name" = "Smith")),
         httpheader = c('Content-Type' = 'text/plain', ssl.verifypeer = FALSE)))

person Avinash    schedule 03.10.2013    source источник


Ответы (1)


Было бы полезно иметь код, который вы пробовали, но общий ответ заключается в том, что вы можете указать его в аргументе httpheader для curlPerform. Вот немного измененная версия из документации:

h <- basicTextGatherer()
h$reset()
curlPerform(url,
            httpheader=c('Content-Type' = "text/plain"),
            postfields=toJSON(list("name" = "Smith")),
            customrequest = 'POST', 
            writefunction = h$update,
            verbose = TRUE,
            ssl.verifypeer = FALSE)
body <- h$value()
person Thomas    schedule 03.10.2013
comment
Привет, спасибо за ответ. Извините, но из-за политики моей компании я не смогу поделиться фактическим кодом и URL-адресом, который я пытаюсь открыть. И поскольку предоставление веб-сервиса было выполнено какой-то другой командой, я не могу создать простой пример. Я попробую ваш ответ и свяжусь с вами. - person Avinash; 03.10.2013
comment
@Avinash Ну, вы можете не указывать URL-адрес, я в основном просто о том, какие команды вы использовали и какие аргументы вы пытаетесь передать. Смотрите мою правку, я забыл первую строку из примера. - person Thomas; 03.10.2013
comment
curlPerform пытается сделать из него запрос GET. Мне нужно сделать POST-запрос. Я постараюсь объяснить, что я сделал в вопросе. - person Avinash; 03.10.2013
comment
@Avinash См. Мою правку. Вам нужно поместить ssl.verifypeer вне аргумента httpheader. И вы указываете запрос POST специально. - person Thomas; 03.10.2013
comment
Где заканчивается парантез постфилдов? - person Avinash; 03.10.2013
comment
Ага. Оно работает. Благодаря тонну. Я собираюсь проголосовать за все ваши комментарии. Думаю, документацию к этому пакету можно улучшить. Для новичков это не очень понятно. - person Avinash; 03.10.2013