Запуск Curl POST с JSON полезными данными последовательно против файла - PullRequest
0 голосов
/ 27 января 2020

Я врезаюсь в стену, пытаясь создать сценарий, чтобы сэкономить себе достаточно много времени. Я работаю в системе, в которой мне нужно запустить curl POST для списка значений. Длина списка составляет около 400 строк, поэтому я надеюсь найти способ написать это в Bash вместо того, чтобы запускать этот вызов вручную для каждой записи. Ниже приведены некоторые сведения, которые помогут понять, что я пытаюсь выполнить sh:

Если бы я выполнял эту задачу вручную, каждый вызов был бы отформатирован следующим образом:

curl -X POST --header "Content-Type: application/json" -v 'http://www.website.com:8081/cc/membership' -d @json_payload.json

Это указывает на мой JSON в указанном файле, который показан ниже:

{
    "groupId": "12345678987654321",
    "type": "serial",
    "memberInfo": "apple"
}

Если я запустил выше, вызов сработает, и произойдет ожидаемая операция. Проблема в том, что мне нужно запустить это примерно с 400 значениями для этого поля "memberInfo" в полезной нагрузке JSON. Я пытаюсь определить способ запуска одного bash сценария, который будет запускать эту команду curl снова и снова, и обновлять полезную нагрузку JSON для использования каждой строки в файле, как показано ниже:

memberList.txt

apple
banana
peach
pear
orange
.
.

А затем, возможно, вставьте указатель в мой JSON для поля "memberInfo" в этом файле.

Любая и вся помощь / предложения с благодарностью! .

Ответы [ 2 ]

0 голосов
/ 27 января 2020
while read member; do
  curl -X POST --header "Content-Type: application/json" -v 'http://www.website.com:8081/cc/membership' -d '{"groupId": "12345678987654321","type": "serial","memberInfo": "$member"}'
done <members.txt

Это будет работать, если вы заботитесь только о поле memberInfo, другой метод может записывать вашу json построчно в файл payloads.txt. payloads.txt

{"groupId": "12345678987455432","type": "stereo","memberInfo": "apple"}
{"groupId": "34532453453453465","type": "serial","memberInfo": "banana"}
...

, затем используйте его в качестве сценария

while read payload; do
  curl -X POST --header "Content-Type: application/json" -v 'http://www.website.com:8081/cc/membership' -d '$payload'
done <payloads.txt

вот коллекция bash сценариев общего назначения, которые мне приходилось использовать https://github.com/felts94/advanced-bash/blob/master/bash_learn.sh

0 голосов
/ 27 января 2020

Это будет делать, как вы намерены. Это немного запутанно, но вы могли бы полить sh это немного.

#!/bin/bash

function getString(){
    echo $1 | python3 -c '
import json
import sys

payload="""
        {
            "groupId": "12345678987654321",
            "type": "serial",
            "memberInfo": ""
        }
"""
obj = json.loads(payload)
obj["memberInfo"] =  sys.stdin.read().strip()
print(json.dumps(obj, indent = "    "))
'
}


while read member
do
    getString "$member" > json_payload.json
    curl -X POST --header "Content-Type: application/json" -v 'http://www.website.com:8081/cc/membership' -d @json_payload.json
done <<< "$( cat fruits.txt )"

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...