1. ホーム

[解決済み】curlのためにJSONファイル経由でペイロードを渡すには?

2022-04-04 03:52:12

質問

を介して、うまく場所を作ることができる。 curl を以下のコマンドで実行します。

$ curl -vX POST https://server/api/v1/places.json -d "
  auth_token=B8dsbz4HExMskqUa6Qhn& \
  place[name]=Fuelstation Central& \
  place[city]=Grossbeeren& \
  place[address]=Buschweg 1& \
  place[latitude]=52.3601& \
  place[longitude]=13.3332& \
  place[washing]=true& \
  place[founded_at_year]=2000& \
  place[products][]=diesel& \
  place[products][]=benzin \
"

サーバーが返す HTTP/1.1 201 Created .

ここで、ペイロードを以下のようなJSONファイルに格納したいと思います。

// testplace.json
{
  "auth_token" : "B8dsbz4HExMskqUa6Qhn",
  "name" : "Fuelstation Central",
  "city" : "Grossbeeren",
  "address" : "Buschweg 1",
  "latitude" : 52.3601,
  "longitude" : 13.3332,
  "washing" : true,
  "founded_at_year" : 2000,
  "products" : ["diesel","benzin"]
}

そこで、このようなコマンドが実行されるように修正します。

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json

を返して失敗します。 HTTP/1.1 401 Unauthorized . なぜ?

どのように解決するのか?

curl は、POST リクエストにデフォルトのコンテンツタイプである application/x-www-form-urlencoded . JSONリクエストを送信したい場合は、正しいcontent typeヘッダーを指定する必要があります。

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"

しかし、これはサーバーがjson入力を受け入れる場合にのみ機能します。そのため .json を示すだけかもしれません。 出力 がjsonであることを意味し、必ずしもjsonを扱うことを意味するものではありません。 入力 . APIドキュメントを見れば、それがそうであるかどうかのヒントが得られるはずです。

を取得する理由は 401 を展開できないからだと思われます。 auth_token をリクエストしてください。