Я часами пытался отформатировать свое тело сообщения json, чтобы мой скрипт был счастлив, но мне не повезло. В моем коде ниже я хотел бы использовать переменную $utc_format в качестве значения для ключа datetime_gt.
#!/bin/bash
utc_format=$(date -v-3d -v-5M -u +"%Y-%m-%dT%H:%M:%SZ")
curl \
-X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-key: $API_KEY" \
--data '{"query": "query { viewer { zones ( filter: { zoneTag_in: [ \"abcde12345\" ] } ) { firewallEventsAdaptive ( filter: { source: \"waf\" datetime_gt: \"$utc_format\" ruleId: \"123456\" action: \"simulate\" } orderBy: [ datetime_DESC ] limit: 100 ) { clientIP edgeResponseStatus metadata { key value } } } } }"}' \
https://api.api.com/ \
| python -m json.tool >> curl_results
Я даже пытался сделать что-то вроде:
generate_post_data()
{
cat <<EOF
{
<json data>
}
EOF
}
но я получил сообщение об ошибке
"message": "failed to recognize JSON request: 'invalid character '\\n' in string literal'"
:'(
Заранее спасибо!
Сообщение буквально означает, что у вас есть разрыв строки в теле json. Попробуйте убрать разрыв строки, может поможет.
curl \
-X POST \
-H "Content-Type: application/json" \
-H "X-Auth-Email: [email protected]" \
-H "X-Auth-key: $API_KEY" \
--data "$(generate_post_data | tr -d '\n')" \
https://api.api.com/ \
| python -m json.tool >> curl_results
Я сделал это и получил: «сообщение»: «не удалось распознать запрос JSON:« недопустимый символ »\\ t »в строковом литерале»
@jayteezer В этом случае вы можете удалить символ табуляции вместе с --data "$(generate_post_data | tr -d '\n\t')"
Гораздо лучше, чем удалять эти символы, было бы правильно экранировать их, например, используя jq
для генерации данных.
воспользуйтесь поиском....