Ich habe die folgende Eingabedatei temp.txt
, die ich mit curl posten muss -
{
"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}"
}
Unten sehen Sie, wie ich die Datei beziehe und auf dem Server poste. Alles funktioniert einwandfrei und ohne Probleme.
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}'
Jetzt versuche ich, die obige Curl-Anfrage für mehrere zu posten, clientId's
wie in meiner obigen temp.txt
Datei gezeigt. Ich habe ungefähr 10 verschiedene clientId's
, für die ich dasselbe JSON posten möchte, aber für jedes anders clientId
.
Gibt es eine Möglichkeit, dies allgemein genug zu gestalten, sodass es beispielsweise clientId's
aus einer anderen Datei lesen kann, clientIds.txt
die eine Liste aller Dateien enthält, clientId's
und dann jedes JSON für sich clientId
an den Server senden kann?
Ich kann Inhalte in clientIds.txt
der Datei haben als -
1234
9812
6751
2181
Jetzt sollte ich für jeden ein JSON wie dieses erstellen clientId
und es auf dem Server posten. Ist das überhaupt möglich? Ich kann temp.txt
eine Datei als Vorlage verwenden, clientId
aus der das Feld ausgefüllt werden kann clientIds.txt
, und dann können wir es auf dem Server posten, aber ich bin nicht sicher, wie wir das in einem Shell-Skript machen können?
Für Client-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}"
}
Für Client-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}"
}
Für Client-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}"
}
Aktualisieren
Ich habe so etwas in meinem Bash-Skript versucht, aber ich bekomme es nicht zum Laufen, da mir einige Dinge nicht klar sind. Wie kann ich meine JSON-Vorlagendatei für jede Client-ID ersetzen und diese JSON dann mit curl an den Server senden?
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
Antwort1
Sie könnten eine Bash-Datei erstellen, die diese Liste durchläuft:
#!/bin/bash
for word in $(< clientIds.txt)
do
echo "curl $word"
done
Ersetzen Sie den echo curl
Befehl durch Ihren funktionierenden curl-Befehl, aber die$WortVariable ist die nächsteKunden IDin Ordnung
Oder führen Sie den Codeblock einfach direkt in der Befehlszeile aus.