Массив в теле запроса httr POST

Этот вызов curl работает для создания новой капли в Digital Ocean.

curl -X POST "https://api.digitalocean.com/v2/droplets" \
   -d '{"name":"test3","region":"nyc2","size":"512mb","image":5562742,"ssh_keys":[89103]}' \
   -H "Authorization: Bearer $TOKEN" 
   -H "Content-Type: application/json"

Однако у меня возникли проблемы с тем, чтобы запрос httr::POST() работал только тогда, когда задан параметр ssh_keys. В приведенном выше методе параметр ssh_keys, если он задан, должен быть массивом.

Я предположил, что список параметров может быть передан в тело, например, где параметр ssh_keys находится внутри списка

args <- list(name="test3", region="nyc2", size="512mb", image="5562742", ssh_keys=list(891111))
POST(url, config=auth, body=args)

Я предполагаю, что это то, что происходит внутри:

jsonlite::toJSON(args)

[1] "{ \"name\" : [ \"test3\" ], \"region\" : [ \"nyc2\" ], \"size\" : [ \"512mb\" ], \"image\" : [ \"5562742\" ], \"ssh_keys\" : [ [ 89103 ] ] }"

Что, я думаю, сработает, но, возможно, это не то, что происходит? Игра с параметром encode в POST не помогает.

Вызов curl работает с терминала, но с помощью httr::POST() я продолжаю получать сообщение об ошибке

Вы указали неверные идентификаторы ключа ssh для создания дроплета.


person sckott    schedule 01.09.2014    source источник


Ответы (2)


Может быть, что-то вроде:

req <- POST(
    url = "https://api.digitalocean.com/v2/droplets",
    body = toJSON(args, auto_unbox=TRUE),
    add_headers (
        "Content-Type" = "application/json",
        "Authorization" = paste("Bearker", TOKEN)
    )
)
person Jeroen    schedule 01.09.2014
comment
Спасибо за это, это почти готово, но мне все еще нужно ssh_keys в массиве, поэтому мне пришлось unbox() все остальные параметры, но оставить ssh_keys в штучной упаковке. Кроме того, пришлось установить encode='json' в вызове POST() - person sckott; 01.09.2014

В этом конкретном случае

x <- jsonlite::toJSON(args, auto_unbox=TRUE)
cat(x)

кажется, возвращает правильный формат (при условии, что проблема не в заголовках), поэтому их

POST(url, config=auth, body=x)

должен отправить правильный запрос.

person MrFlick    schedule 01.09.2014