テンプレート ファイルをオンザフライで変更し、curl を使用してサーバーに投稿しますか?

テンプレート ファイルをオンザフライで変更し、curl を使用してサーバーに投稿しますか?

以下の入力temp.txtファイルをcurlを使用して投稿する必要があります -

{
  "query":"\n{\n  data(clientId: 1234, filters: [{key: \"o\", value: 100}], key: \"world\") {\n    title\n    type\n    pottery {\n      text\n      pid\n      href\n      count\n      resource\n    }\n  }\n}"
}

以下は、ファイルを入手してサーバーに投稿する方法です。すべて問題なく正常に動作します。

curl 'url' \
  -H 'Accept-Encoding: gzip, deflate, br' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Connection: keep-alive' -H 'DNT: 1' \
  -H 'Origin: url' \
  --data-binary "@/Users/david/Downloads/temp.txt" \
  --compressed \
  --silent \
  --output /dev/null \
  --write-out '%{http_code}'

clientId's今、上記のファイルに示されているように、複数の curl リクエストを投稿しようとしていますtemp.txt。 10 個ほどの異なるリクエストがありclientId's、それぞれに対して同じ json を投稿したいのですが、それぞれ異なりますclientId

これを十分に汎用化して、たとえばすべてのリストを含むclientId's他のファイルから読み取り、各 json を独自にサーバーに投稿できるようにする方法はありますか?clientIds.txtclientId'sclientId

clientIds.txtファイル内のコンテンツは次のようになります-

1234
9812
6751
2181

次に、それぞれに対してこのような json を作成しclientId、それをサーバーに投稿する必要があります。これは可能でしょうか?temp.txtファイルをテンプレートとして使用して、clientIdフィールドをファイルから入力しclientIds.txt、それをサーバーに投稿することはできますが、シェル スクリプトでこれをどのように実行できるかわかりません。

クライアントID: 9812

{
   "query":"\n{\n  data(clientId: 9812, filters: [{key: \"o\", value: 100}], key: \"world\") {\n    title\n    type\n    pottery {\n      text\n      pid\n      href\n      count\n      resource\n    }\n  }\n}"
}

クライアントID: 6751

{
   "query":"\n{\n  data(clientId: 6751, filters: [{key: \"o\", value: 100}], key: \"world\") {\n    title\n    type\n    pottery {\n      text\n      pid\n      href\n      count\n      resource\n    }\n  }\n}"
}

クライアントID: 2181

{
   "query":"\n{\n  data(clientId: 2181, filters: [{key: \"o\", value: 100}], key: \"world\") {\n    title\n    type\n    pottery {\n      text\n      pid\n      href\n      count\n      resource\n    }\n  }\n}"
}

アップデート

私は自分の bash スクリプトでこのようなことを試してみましたが、いくつかの点で混乱しているためうまく動作しません。各 clientId のテンプレート json ファイルを置き換えて、その json を curl を使用してサーバーに投稿するにはどうすればよいでしょうか。

while IFS= read -r line; do
    # this below line isn't working
    cat temp.txt | sed 's/clientId:[^ ]*/clientId:$line/'
    # and how should I use new json to post curl
done < clientIds.txt

答え1

そのリストをループする bash ファイルを作成できます。

#!/bin/bash
for word in $(< clientIds.txt)
do
    echo "curl $word"
done

このecho curlコマンドを実際のcurlコマンドに置き換えてください。ただし、$単語変数は次のクライアントID順番に

または、そのコード ブロックを CLI で直接実行します。

関連情報