Я выполняю эту задачу как часть более крупной цели в скрипте Ant. Он выполняет команду в командной строке Windows и перенаправляет вывод в текстовый файл в каталоге temp. Я изменил аргумент URL для защиты конфиденциальной информации.Задача Ant exec с использованием cURL для POST тела JSON не работает, идентичная команда работает вручную в командной строке Windows
<exec executable="cf.cmd" output="${java.io.tmpdir}/cmd_out.txt" failonerror="true" vmlauncher="false">
<arg value="curl" />
<arg value="POST" />
<arg value="http://www.google.com/v2/routes" />
<arg value="--body" />
<arg value="'{"host": "${old.app.name}", "domain_guid": "${domain.guid}", "space_guid": "${space.guid}"}'" />
</exec>
Из подробных журналов Ant, эта задача производит следующую команду:
Current OS is Windows 7
[exec] Output redirected to C:\Users\foo\AppData\Local\Temp\cmd_out.txt
[exec] Executing 'cf' with arguments:
[exec] 'curl'
[exec] 'POST'
[exec] 'http://www.google.com/v2/routes'
[exec] '--body'
[exec] ''{"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}''
[exec]
[exec] The ' characters around the executable and arguments are
[exec] not part of the command.
При запуске эта задача производит следующий вывод в cmd_out.txt:
{
"code": 1001,
"description": "Request invalid due to parse error: lexical error: invalid char in json text.\n {host: foo, domain_guid\n (right here) ------^\n
"error_code": "CF-MessageParseError
"types": [
"MessageParseError
"Error"
],
"backtrace": []
}
Однако, если Я выполняю эту идентичную команду вручную в командной строке Windows:
cf curl POST http://www.google.com/v2/routes --body '{"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}'
Затем я получаю правильный результат. Нет смысла публиковать его здесь, но это сообщение об успешной работе вместо сообщения об ошибке с ошибкой.
Если я запускаю эту команду в руководстве командной строки Windows (обратите внимание на отсутствие одинарных кавычек вокруг тела JSON), то я получаю ту же ошибку, как Ant скрипт:
cf curl POST http://www.google.com/v2/routes --body {"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}
Я в потеря здесь. Из того, что я вижу, Ant выполняет ту же команду, что и я, вручную. Однако версия Ant не удалась, и версия для руководства преуспела. Может ли кто-нибудь увидеть, что я делаю неправильно?
Я также использовал «'» для одинарных кавычек вместо шестигранного представления, но я не думаю, что имеет значение. – NDGibson