3

这个 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参数 inPOST似乎没有帮助。

curl 调用从终端工作,但使用httr::POST()我不断收到错误消息

您为 Droplet 创建指定了无效的 ssh 密钥 ID。

4

2 回答 2

3

在这种特殊情况下,

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

似乎返回了正确的格式(假设问题不在于标题)所以他们

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

应该发送正确的请求。

于 2014-09-01T16:10:32.387 回答
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)
    )
)
于 2014-09-01T16:12:10.083 回答