Я использую cURL, чтобы поместить некоторые данные на сервер Redmine. Я хочу использовать несколько опций --data-xxx
для создания правильного тела запроса XML. Команда выглядит так:
curl -H "Content-Type: application/xml" \
-H "X-Redmine-API-Key: $TOKEN" \
-d "<?xml version=\"1.0\"?><wiki_page><text>" \
--data-binary "@$FILE" \
-d "</text></wiki_page>" \
-X PUT http://some.redmine.site.com/projects/someproj/wiki/test.xml
Однако, как опция --data
задокументирована:
Если какой-либо из этих параметров используется более одного раза в одной и той же командной строке, указанные фрагменты данных будут объединены с разделительным символом & -symbol. Таким образом, использование
-d name=daniel -d skill=lousy
приведет к созданию пост-чанка, который выглядит какname=daniel&skill=lousy
.
Я могу понять, что разработчик cURL сделал это таким образом, чтобы помочь создать URL со строкой запроса. Но в этой ситуации эти добавленные символы-& будут искажать тело XML моего запроса. Я могу предвосхитить "nbsp;" к значению, чтобы обойти это, когда это после --data
. Но когда дело доходит до использования, смешанного с файлом (--data-binary "@$FILE"
), нет никакого способа решить это.