2017-08-15 24 views
1

JSONファイルをURLに投稿するためのシェルスクリプトを作成しています。シェルスクリプトを使用してURLにJSONファイルを投稿する

ヘッダーは次のとおりです。

Content-Type: application/json 
Accept: application/json 
Account-Number: xxxxxxxx 
Authorization: Basic eW91cl91c2VyX25hbWU6cGFzc3dvcmQ= 

上記のJSON文字列が.JSONファイルに保存され、私のcurlコマンドは、それを処理し、所望の応答を取得する必要があります。次のコマンドを使用しますが、正常に処理されません。

curl -H "Content-Type: application/json" -X POST -d "[email protected]$f" https://abcdef.com/test/example/v1/ 

$ fにはJSONファイル名があります。

私も次のような質問があります。

  1. は私のヘッダーとJSON文字列が同じJSONファイルにあるべきか?ヘッダーが異なるファイルに存在する場合、その拡張子は何ですか? curlコマンドを使用してそれをどのように処理するのですか?
  2. I」は、{などの特殊文字のために行う必要があり、特定の取り扱い,:などはありますか?

答えて

1

あなたは(さらに処理せずに)正確に-であるあなたのJSONデータを投稿したいと仮定すると、あなたは--data-binaryを使用する必要があります。改行などの保存コンテンツが必要でない場合は、-d/--dataを使用することができますが、フォーム-d @fileで、このように:コースの

filename=file.json 
curl http://httpbin.org/post --data-binary "@$filename" --user "name:password" -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Account-Number: xxxxxxxx' 

、孤立し、コンマを掛けるように(あなたのJSONにあなたが持っているすべての構文エラーを修正した後一重引用符など)。形式のデータの指定key=val(または[email protected])は、あなたが試しているように動作しません(ただし、-Fのフォームパラメータに使用できます)。 valid data part syntax in curlを参照してください。 --data-binaryを使用した場合、デフォルトの方法はPOSTではありません(そう、-Xでそれを指定する必要)、しかし、あなたは正しいContent-Typeを指定する必要がありますことを

注意。

また、HTTP基本認証の手動でAuthorizationヘッダーを計算する代わりに、-u/--user <user:pass>オプションを使用してください。

4

すべてのヘッダーを送信していません。ファイルから目的のヘッダーを読み取るオプションがあるとは思わない。

あなたはbashでスクリプトしているので、私は読みやすくするためのシェル・アレイ内のすべてのオプションを保存したい:

curl_opts=(
    -H "Content-Type: application/json" 
    -H "Accept: application/json" 
    -H "Account-Number: xxxxxxxx" 
    -H "Authorization: Basic eW91cl91c2VyX25hbWU6cGFzc3dvcmQ=" 
    -X POST 
    --data-binary "@$f" 
) 
curl "${curl_opts[@]}" https://abcdef.com/test/example/v1/ 
+1

FYI、これは動作しません。 '-d data = @ file'でJSONをこのように投稿することはできません。 – randomir

+0

かなり正しいです。編集しました –

+0

あなたの回答の皆さんありがとうございました。私は - データ - バイナリオプションを試して、ヘッダーの内容をすべて入れましたが、 "エラー": "メッセージ": "要求が認証に失敗しました"、 "error_code": "API_001"、 "error_name" : "Unauthenticated request" - JSON形式です。あなたは助けてもらえますか? curl --data-binary "@ $ filename" -H "Content-Type:application/json" -H "Accept:application/json" -H "アカウント番号:3283950684" -H "認証:Basic OTFiNDA0MjctYzJhNi00MGVmLTgzMzgtOWIzY2JjODE2N2E1OnhjNGJkZjNmMjVmMw == "-X POST https://digitalapi.auspost.com.au/test/ –

関連する問題