Как да задам тип съдържание в POST заявка в R?

Трябва да направя заявка за публикация. Проблемът е, че приложението, което излага своя api като уеб услуга, е задало своя Content-Type на „text/plain“. Опитах пакета RCurl и пакета httpRequest, но не можах да разбера как да задам типа съдържание. Опитах се директно да направя postrequest към URL, който няма този тип съдържание, след което postForm проработи. Някаква помощ тук?

РЕДАКТИРАНЕ: Ще се опитам да обясня какво трябва да направя тук. Имам url. Трябва да направя POST заявки към него, като му предам някои параметри нещо подобно

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

Това е, което бихте въвели, ако използвате разширението на конзолата REST в chrome за извършване на повиквания към уеб услуги. Трябва да направя това от R, като задам тип съдържание на "text/plain"

Това, което опитах е това,

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
Къде завършва скобата на postfields? - person Avinash; 03.10.2013
comment
да Работи. Благодаря много. Ще гласувам за всички ваши коментари. Мисля, че документацията за този пакет може да бъде подобрена. Не е много интуитивен за начинаещи. - person Avinash; 03.10.2013