Я пытаюсь использовать Curl для отправки некоторых данных. Вот самый простой пример, который работает:

curl -v -H "Content-type: text/html" 127.0.0.1:1111

Я вижу вывод, как это:

GET / HTTP/1.1
Host: 127.0.0.1:1111
User-Agent: curl/7.49.1
Accept: */*
Content-type: text/html

Content-type установлен там в выводе. Оно работает. То, что я хочу, это ввести тип содержимого с помощью переменной среды.

Я пишу это:

HTML='-H "Content-Type: text/html"

Затем в следующей команде я пишу это:

curl -v $HTML 127.0.0.1:1111

Но это не удалось. Мне дают этот вывод:

GET / HTTP/1.1
Host: 127.0.0.1:1111
User-Agent: curl/7.49.1
Accept: */*
  "Content-Type: text/html"

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

Я попытался использовать --header вместо -H, как это:

HTML='--header "Content-Type: text/html"'

Это дает запутанную ошибку:

curl: option --header "Content-Type: text/html": is unknown
curl: try 'curl --help' or 'curl --manual' for more information

Я сбит с толку. Я видел другие сообщения от людей, которым нужна переменная окружения в данных поста, что является другой проблемой.

Я использую zsh и Curl на MAC OS X. Надеюсь, мой пример достаточно прост.

Спасибо за ваше время и помощь!

1 ответ1

2

Такое поведение связано с тем, что zsh не разделяет параметры по пробелам по умолчанию, поэтому вы действительно передаете --header "Content-Type: text/html" для curl как один параметр, тогда как он должен быть передан как два Опция `--header`` и соответствующее значение).

Вы можете посоветовать zsh разделить слова (что также учитывает вложенные кавычки, что важно в вашем примере), используя флаг расширения (z) :

HTML='--header "Content-Type: text/html"'
curl -v ${(z)HTML} 127.0.0.1:1111

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .