Используйте CURL POST, используя вывод CURL GET в bash

У меня есть следующий GET CURL, из которого я получаю xml.

curl -X 'GET' \
  'http://local/something/something2' \
  -H 'accept: application/json' \
  -H 'authorization: auth'

Теперь я хочу использовать предыдущий xml, полученный выше, в этом POST CURL:

curl -X 'POST' \
  'http://something/something2' \
  -H 'accept: application/json' \
  -H 'authorization: auth' \
  -H 'Content-Type: application/json' \
  -d '{
  "components": [
    {
      "locator": "sample",
      "config": xml file from above
    }
  ]
}'

Как я могу сделать второй CURL с POST?

🤔 А знаете ли вы, что...
Bash поддерживает механизмы контроля доступа к файлам и каталогам с помощью прав доступа.


61
1

Ответ:

Решено

См. этот пост, чтобы узнать, как записать вывод первой команды в переменную. Используйте это так:


output=$(curl -X 'GET' \
  'http://local/something/something2' \
  -H 'accept: application/json' \
  -H 'authorization: auth')

# Assuming the $output variable is a JSON object, with a property
# called 'result', use 'jq' to extract the value of that property
result=$(jq -r '.result' <<< "$output")

# As noted above, escape the double quotes with backslashes
curl -X 'POST' \
  'http://something/something2' \
  -H 'accept: application/json' \
  -H 'authorization: auth' \
  -H 'Content-Type: application/json' \
  -d "{
  \"components\": [
    {
      \"locator\": \"sample\",
      \"config\": \"$result\"
    }
  ]
}"

Обратите внимание на двойные кавычки — двойные кавычки должны быть там, чтобы можно было использовать переменную $output. В результате двойные кавычки в JSON необходимо экранировать.