次のコマンドを実行して、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
は、デフォルトのコンテンツタイプapplication/x-www-form-urlencoded
でPOST要求を送信します。 JSONリクエストを送信したい場合は、正しいコンテンツタイプヘッダを指定する必要があります。
$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"
しかし、これはサーバがJSON入力を受け付ける場合にのみ機能します。 URLの末尾にある.json
は、出力がjsonであることを示すだけのものであり、必ずしもjson入力も処理するという意味ではありません。 。それがそうであるかどうかについてのAPIドキュメントはあなたにヒントを与えるべきです。
他のエラーではなく401
が発生するのは、おそらくサーバーが要求からauth_token
を抽出できないためです。