невозможно правильно экранировать двойные кавычки в команде curl в файле .bat - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть следующая команда curl для загрузки файла в облачный API.

curl -k -w %{http_code} -H "Content-Type:text/plain" --data-binary @\\path\to\file.txt https://api.somesite.com/endpoint

Эта команда curl отлично работает, если я ввожу ее непосредственно в консоль cmd.Мне нужно, чтобы он работал в командном файле, но когда я помещаю команду в командный файл как есть, она не может проанализировать команду (URL не указан).Это происходит из-за двойных кавычек вокруг «Content-Type: text / plain».Наличие этого в команде крайне важно для возможности API обработать мой файл.

Основываясь на ответах на этот вопрос Я попробовал несколько разных способов избежать двойных кавычек.Это результаты различных методов.

^"Content-Type:text/plain^" 

Это не загружает файл, ошибка скручивания: URL не указан!

\"Content-Type:text/plain\"

Это загружает файл, отчет об успешном закручивании, но API не может распознать файл как обычныйtext.

""Content-Type:text/plain""

Это загружает файл, curl сообщает об успехе, но API не может распознать файл как обычный текст.

\""Content-Type:text/plain\""

Это не загружает файл, ошибка curl:URL не указан!

Итак, я нашел много способов потерпеть неудачу, но нет комбинации, которая бы работала для batch, curl и api вместе.Есть ли другие способы побега, которые я могу попробовать или какие-либо другие предложения?

1 Ответ

0 голосов
/ 09 ноября 2018

Ваша проблема не в кавычках, а в знаке процента.

Внутри пакетного файла - знак процента, который не является частью операции извлечения значения, но литерал необходимо экранировать, удваивая их.

Попробуйте с

curl -k -w %%{http_code} -H "Content-Type:text/plain" --data-binary @\\path\to\file.txt https://api.somesite.com/endpoint

Парсер cmd видит одиночный % как начало запроса значения переменной, а текст после знака процента видится как имя переменной.

curl -k -w %{http_code} -H "Content-Type:text/plain" ....
           ^............................^
           this is a failed variable retrieval operation

И это происходит как в командной строке, так и внутри пакетных файлов, но поведение по умолчанию для не объявленных переменных в обоих случаях различно. В командной строке, если мы запрашиваем переменную, а она не существует, то анализатор сохраняет имя переменной, но внутри пакетных файлов анализатор заменяет запрос переменной пустой строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...