以下の入力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.txt
clientId's
clientId
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 で直接実行します。