Поток JSON Результаты Curl в Данные Параметр Curl - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь направить вывод JSON из одного локона в параметр данных другого локона.Возможно?

Шаг 1: Например, curl, который выводит JSON:

curl -sG api.com/test -H "Authorization: Bearer ${token}" | jq '.[] | select(.query|test("latency")) | @json'

Возвращение:

"{\"query\":\"origin == 'router' and name == 'latency'\",\"threshold\":{\"critical\":65000,\"warning\":55000,\"type\":\"UPPER\"}}"

Шаг 2: Если я использую вывод первого локона во втором ложе, у меня будет успешный ответ:

curl -v "api.com/test" --data "{\"query\":\"origin == 'router' and name == 'latency'\",\"threshold\":{\"critical\":20000,\"warning\":15000,\"type\":\"UPPER\"}}" -H "Authorization: Bearer ${token}" -H "Content-Type: application/json"

Успешный ответ:

{
  "query" : "origin == 'router' and name == 'latency'",
  "threshold" : {
    "critical" : 20000.0,
    "type" : "UPPER",
    "warning" : 15000.0
  }
}

Шаг1 и 2 Объединено: Я пытаюсь объединить оба шага в один, например:

curl -sG hapi.com/test -H "Authorization: Bearer ${token}" | jq '.[] | select(.query|test("latency")) | @json' | curl -d @- -H "Authorization: Bearer ${token}" -H "Content-Type: application/json" "api.com/test"

Но продолжаю получать неверный запрос:

{
  "timestamp" : 1553950852034,
  "status" : 400,
  "error" : "Bad Request",
  "exception" : "org.springframework.http.converter.HttpMessageNotReadableException",
  "message" : "Bad Request",
  "path" : "/test"
}

Возможно?

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Кавычки, которые вы видите в выходных данных первой команды: литерал кавычки, добавленные @json. Они отличаются от кавычек, которые вы используете во втором примере, это просто синтаксические кавычки для защиты содержимого от расширения оболочки.

При передаче напрямую от первого curl ко второму синтаксические кавычки не нужны, поскольку оболочка никогда не видит данные. Вам нужно удалить фильтр @json, который заключает ваш ответ в кавычки.

auth="Authorization: Bearer ${token}"
curl -sG hapi.com/test -H "$auth" |
  jq '.[] | select(.query|test("latency"))' |
  curl -d @- -H "$auth" -H "Content-Type: application/json" "api.com/test"
0 голосов
/ 30 марта 2019

Вы можете попробовать

curl -v "api.com/test" --data "`curl -v -sG api.com/test -H "Authorization: Bearer ${token}" | jq '.[] | select(.query|test("latency")) | @json'`"
...