Как я могу свернуться для запроса с заголовками в сценариях оболочки
Я попытался выполнить инструкцию CURL следующим образом, для которого я получаю требуемый ответ:
curl -s -POST --header 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d '{"query": "q_string", "results": [{"abstract": "abs_string", "title": "title_string"}, "mode": "value", "cache": true, "source": "value"}'
Но когда я попытался передать значения переменных параметру "query", оператор curl, упомянутый ниже, не работает и обнаружил некоторое сообщение об ошибке в ответ:
curl -s -POST --header 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d '{"query": "$query_string", "results": [{"abstract": "abs_string", "title": "title_string"}, "mode": "value", "cache": true, "source": "value"}'
ОШИБКА Заявление:
Не найден [CFN #0005]
Оно работает!
Это веб-страница по умолчанию для этого сервера.
Программное обеспечение веб-сервера работает, но контент еще не добавлен.
Но я уверен, что запрос curl, который я построил вторым с переменной, похож на тот же запрос curl, который я выполнил сначала. Это проверено с использованием echo, который заменяет $query_string на правильное значение.
Я также попробовал другой подход, в котором я не использовал никаких переменных для одного параметра, вместо этого я попытался, как показано ниже:
a='{"query": "query_value", "results": [{"abstract": "abs_string", "title": "title_string"}, "mode": "value", "cache": true, "source": "value"}'
curl -s -POST --header 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d $a
Я также пытался подставить значение использования ${a}
, "$a"
, '$a'
все же такая же ошибка наблюдается.
1 ответ
Одинарные кавычки '
(вы используете в -d
аргумент) сохранить буквальное значение каждого символа, в том числе $
(см. этот так ответ), и именно поэтому ваша переменная query_string
не расширяется.
Попробуй это:
~$ query_string="my query"
~$ echo '$query_string'
$query_string
~$ echo "$query_string"
my query
Итак, вам нужно использовать двойные кавычки "
если вы хотите, чтобы ваши переменные расширились до его значений.
Однако для того, чтобы вкладывать двойные кавычки (внутри других двойных кавычек), как в ваших данных JSON, вы должны либо:
избегайте внутренних кавычек, вот так:
~$ echo "{\"query\": \"$query_string\"}" {"query": "my query"}
но это становится очень уродливым, очень скоро; или же
объединить строки в чередующиеся одинарные и двойные кавычки, например:
~$ echo '{"query": "'"$query_string"'"}"' {"query": "my query"}"
который может быть более читабельным для более коротких строк; или же
используйте здесь документ:
~$ read query <<-END {"query": "$query_string"} END ~$ echo "$query" {"query": "my query"}
Здесь документы особенно удобны для более длинных документов, в которых вы хотите расширение параметра / переменной, подстановка команд, арифметическое расширение и т. Д.
Таким образом, после определения вашего запроса JSON одним из вышеперечисленных способов (возможно, через документ здесь), вы можете написать свой curl
команда как это:
curl -s -X POST -H 'Content-Type: application/json' 'http://www.dummy.com/projectname/page_relevance' -d "$query"