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パラメータをいじってもPOST役に立たないようです。

curl 呼び出しは端末から機能しますが、使用httr::POST()するとエラー メッセージが表示され続けます

ドロップレットの作成に無効な 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 に答える