2017-08-15 37 views
1

我正在編寫一個shell腳本來將JSON文件發佈到URL。使用Shell腳本將JSON文件發佈到URL

標題是:

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. 是否有任何具體的處理,我應該爲特殊字符,如{做,「,:等?

回答

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(似懸逗號,孤立單引號等)。以的形式指定數據(或[email protected]),就像你正在嘗試的那樣,將不起作用(你可以用-F作爲參數);見valid data part syntax in curl

注意,使用--data-binary時,默認方法爲POST(所以,沒有必要與-X指定它),但是你必須指定正確的Content-Type

此外,不要手動計算HTTP基本身份驗證的Authorization標頭,只需使用-u/--user <user:pass>選項。

4

您並未發送所有標題。我不相信有一個選項可以從文件中讀取所需的標題。

既然你在bash腳本,我會存儲在shell數組中的所有選項可讀性:

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

僅供參考,這是不行的。你不能像'-d data = @ file'這樣發佈JSON。 – randomir

+0

很對。編輯 –

+0

謝謝你的迴應傢伙。我嘗試了--data -binary選項,並且還放置了所有的頭文件內容,但是仍然出現這個錯誤:「errors」:「message」:「請求失敗,錯誤代碼」:「API_001」,「error_name」 :「未經身份驗證的請求」 - 以JSON格式。你能幫忙嗎?這裏是我的實際curl命令:curl --data-binary「@ $ filename」-H「Content-Type:application/json」-H「Accept:application/json」-H「Account-Number:3283950684」-H「授權:基本OTFiNDA0MjctYzJhNi00MGVmLTgzMzgtOWIzY2JjODE2N2E1OnhjNGJkZjNmMjVmMw ==「-X POST https://digitalapi.auspost.com.au/test/ –