パラメータ - Spring/RESTをテストするためのTerminal/CommandlineからCurlでJSONデータをPOSTする方法




curl post パラメータ (14)

CURL Windowsを使用して、これを試してください:

curl -X POST -H "Content-Type:application/json" -d "{\"firstName\": \"blablabla\",\"lastName\": \"dummy\",\"id\": \"123456\"}" http-host/_ah/api/employeeendpoint/v1/employee

私はUbuntuを使用し、それにCurlをインストールしました。 CurlでSpring RESTアプリケーションをテストしたい。 私はJava側で私のPOSTコードを書いた。 しかし、私はそれをCurlでテストしたい。 私はJSONデータを投稿しようとしています。 データの例は次のとおりです。

{"value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true}

私はこのコマンドを使用します:

curl -i \
    -H "Accept: application/json" \
    -H "X-HTTP-Method-Override: PUT" \
    -X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","configurationGroup":null,"name":"Configuration Deneme 3","description":null,"identity":"Configuration Deneme 3","version":0,"systemId":3,"active":true \
    http://localhost:8080/xx/xxx/xxxx

このエラーを返します。

HTTP/1.1 415 Unsupported Media Type
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Length: 1051
Date: Wed, 24 Aug 2011 08:50:17 GMT

エラーの説明は次のとおりです。

要求エンティティが要求されたメソッド()の要求されたリソースでサポートされていない形式であるため、サーバーはこの要求を拒否しました。

Tomcatログ: "POST / ui / webapp / conf / clear HTTP / 1.1" 415 1051

Curlコマンドの正しいフォーマットに関するアイデアはありますか?

編集:

これは私のJava側のPUTコードです(私はGETとDELETEをテストしています)

@RequestMapping(method = RequestMethod.PUT)
public Configuration updateConfiguration(HttpServletResponse response, @RequestBody Configuration configuration) { //consider @Valid tag
    configuration.setName("PUT worked");
    //todo If error occurs response.sendError(HttpServletResponse.SC_NOT_FOUND);
    return configuration;
} 

JSONファイル "MyData.json"を作成し、コンテンツを追加します:

[
    {
        "Key_one": "Value_one",
        "Key_two": "Value_two",
        "Key_three": "Value_three"
    }
]

その後、次のコマンドを実行する必要があります。

curl -v -H "Content-Type: application/json" -X POST --data @MyData.json -u USERNAME:PASSWORD http://localhost:8000/env/add_server

Windowsの場合、 -d値を一重引用符で囲んでもうまく-dませんでしたが、二重引用符に変更しても機能しました。 また、中括弧の中で二重引用符を避ける必要がありました。

すなわち、次のように動作しませんでした:

curl -i -X POST -H "Content-Type: application/json" -d '{"key":"val"}' http://localhost:8080/appname/path

しかし、以下が働いた:

curl -i -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" http://localhost:8080/appname/path

content-typeをapplication / jsonに設定する必要があります。 しかし、 -dはContent-Type application/x-www-form-urlencoded送信しますが、これはSpring側では受け入れられません。

curlのmanページを見ると、 -Hを使うことができると思います。

-H "Content-Type: application/json"

完全な例:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"xyz","password":"xyz"}' \
  http://localhost:3000/api/login

-H--header 、-- -d--data

-dフラグがPOST要求を意味するので、 -request POSTオプションで-dを使用する場合はオプションです

Windowsでは、状況が多少異なります。 コメントスレッドを参照してください。


HTTPiecurl代わりに推奨される方法です。

$ http POST http://example.com/some/endpoint name=value name1=value1

これはデフォルトでJSONを話し、必要なヘッダーの設定と有効なJSONとしてのデータのエンコードの両方を処理します。 もあります:

Some-Header:value

ヘッダーの場合は

name==value

クエリ文字列パラメータの場合 データが大量にある場合は、JSONエンコードされたファイルから読み込むこともできます。

 [email protected]


これは私のためにうまくいった。

curl -X POST --data @json_out.txt http://localhost:8080/

ここで、

-X http動詞を意味します。

--data送信したいデータを意味します。


これは私のために働いた:

curl -H "Content-Type: application/json" -X POST -d @./my_json_body.txt http://192.168.1.1/json

たとえば、JSONファイルparams.jsonを作成し、このコンテンツを追加します。

[
    {
        "environment": "Devel",
        "description": "Machine for test, please do not delete!"
    }
]

次に、このコマンドを実行します。

curl -v -H "Content-Type: application/json" -X POST --data @params.json -u your_username:your_password http://localhost:8000/env/add_server

ちょっと遅かったですが、これは投稿されていませんので、jsonをファイルに入れ、 - file-uploadオプションを使用して次のように標準入力でカールすることができます:

 echo 'my.awesome.json.function({"do" : "whatever"})' | curl -X POST "http://url" -T -

安心して使えるかもしれません: https://github.com/micha/resty : https://github.com/micha/resty

コマンドラインのREST要求を簡略化するラッパーラウンドのCURLです。 これをAPIエンドポイントに指定すると、PUTコマンドとPOSTコマンドが提供されます。 (ホームページからの適合例)

$ resty http://127.0.0.1:8080/data #Sets up resty to point at your endpoing
$ GET /blogs.json                  #Gets http://127.0.0.1:8080/data/blogs.json
                                   #Put JSON
$ PUT /blogs/2.json '{"id" : 2, "title" : "updated post", "body" : "This is the new."}'
                                   # POST JSON from a file
$ POST /blogs/5.json < /tmp/blog.json

また、コンテンツタイプヘッダーを追加する必要があることがよくあります。 ただし、サイトごとにメソッドごとに設定ファイルを追加するように設定することもできます。 デフォルトのRESTYオプションを設定する


直感的なGUIでPostmanを使用して、 cURLコマンドを組み立てることができます。

  1. Postmanをインストールして開始する
  2. あなたのURL、Post Body、Request Headersなどを入力してください。
  3. Codeクリック
  4. ドロップダウンリストから[ cURLを選択します。
  5. cURLコマンドをコピー&ペーストする

注:ドロップダウンリストには自動リクエスト生成のオプションがいくつかあります。その理由は、私の投稿が最初に必要であると考えた理由です。


私は以下の形式を使用してWebサーバーでテストしています。

use -F 'json data'

このJSON dict形式を仮定しましょう:

{
    'comment': {
        'who':'some_one',
        'desc' : 'get it'
    }
}

完全な例

curl -XPOST your_address/api -F comment='{"who":"some_one", "desc":"get it"}'

私は自分のアプリケーションでJSONを使用しています。

curl -X POST -H "Content-Type:application/json" -d '{"params1":"value1","params2":"value2"} hostname:port/api

しかし、多数のパラメータがある場合は、常にJSONリクエストボディを持つファイルを以下のように使用することをお勧めします。

curl -X POST -H "Content-Type:application/json" -F "[email protected]/users/suchi/dekstop/JSON_request.txt" hostname:port/api




curl