110

データベースに入力する一連のデータがあります。データを入力するためのユーザー インターフェイスは一括入力には適していないため、同等のコマンド ラインを作成しようとしています。Chrome で UI のネットワーク リクエストを調べると、json オブジェクトの PUT リクエストが表示されます。リクエストを複製しようとすると

curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

エラーが発生する

curl: (3) [globbing] 位置 X でネストされたブレースはサポートされていません

X は最初の "[" の文字位置です。

配列を含む json オブジェクトを PUT するにはどうすればよいですか?

4

5 に答える 5

164

コマンド ラインには、PUT で送信する文字列の前に-d/--data を挿入する必要があり、Accept ではなく Content-Type を設定する必要があります。

curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' \
     http://example.com/service

質問からの正確な JSON データを使用すると、完全なコマンド ラインは次のようになります。

curl -H 'Content-Type: application/json' -X PUT \
    -d '{"tags":["tag1","tag2"],
         "question":"Which band?",
         "answers":[{"id":"a0","answer":"Answer1"},
                    {"id":"a1","answer":"answer2"}]}' \
    http://example.com/service

curl注: JSON データは読みやすくするためだけにラップされており、リクエストには有効ではありません。

于 2013-03-15T14:02:41.470 に答える
101

元の投稿には他の問題 (「-d」の欠落など) がありましたが、エラー メッセージはより一般的です。

curl: (3) [globbing] 位置 X でネストされたブレースはサポートされていません

これは、中括弧 {} と角括弧 [] が curl の特殊なグロビング文字であるためです。このグロビングをオフにするには、" -g " オプションを使用します。

例として、次の Solr ファセット クエリは、"-g" を使用して curl globbing をオフにしないと失敗します。 curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

于 2014-10-16T14:43:22.630 に答える
39

このコンテキストで関連するAcceptヘッダーはContent-Type

多くの場合、JSON を送信するときにContent-Typeasを指定することをお勧めします。application/jsoncurl の構文は次のとおりです。

-H 'Content-Type: application/json'

したがって、完全な curl コマンドは次のようになります。

curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`
于 2013-05-22T13:10:13.570 に答える
3

助けになった唯一のことは、JSON 本文テキストの代わりに JSON のファイルを使用することです。cURLを使用してファイルの内容をボディエンティティとして送信する方法に基づく

于 2015-09-20T15:46:32.637 に答える