командная строка curl POST в службе Windows RESTful
моя проблема: Использование инструмента командной строки для сворачивания моего сервера localhost при отправке некоторых данных вместе с моим запросом POST не работает.
что, кажется, вызывает ошибку: Представьте себе что-то подобное
curl -i -X POST -H 'Content-Type: application/json' -d '{"data1": "data goes here", "data2": "data2 goes here"}' http:localhost/path/to/api
результат возвращаемых данных
curl: (6) Could not resolve host: application; No data record of requested type
curl: (6) Could not resolve host: data goes here,; No data record of requested type
curl: (6) Could not resolve host: data2; No data record of requested type
curl: (3) [globbing] unmatched close brace/bracket at pos 16
после некоторого поиска я понял, что проблема не может быть синтаксом, используемым для запроса, так как он работает на UNIX ракушки.
возможно ли использование Windows? Это так похоже на полностью разбитую скорлупу. это неправильно относится к одинарным кавычкам против двойных кавычек. Я просто попробовал эту командную строку, и она отлично работала на моем linux-боксе. http://curl.haxx.se/mail/archive-2011-03/0066.html
Я пытался работать с теми, "избегая его", но он все еще не работал
2.
curl-I-X POST-H 'Content-Type: application/json '- d ' {"data1": " данные идут сюда", " data2": " data2 идет сюда"}' http: //localhost/path/to/api
3.
curl-i-X POST-H 'Content-Type: application /json' -d '{"data1": "данные идут здесь", "data2": "data2 идет здесь"}' http: //localhost/path/to / api
5 ответов
я столкнулся с той же проблемой на моем ноутбуке win7 x64 и смог заставить его работать с помощью выпуска curl, который помечен Win64-универсальный W SSL используя очень похожий формат командной строки:
C:\Projects\curl-7.23.1-win64-ssl-sspi>curl -H "Content-Type: application/json" -X POST http://localhost/someapi -d "{\"Name\":\"Test Value\"}"
который отличается только от вашей 2-й escape-версии, используя двойные кавычки вокруг экранированных и значения параметра заголовка. Определенно предпочитаю синтаксис оболочки linux больше.
Другой альтернативой для командной строки, которая проще, чем борьба с кавычками, является помещение json в файл и использование префикса @ параметров curl, например, со следующим в json.txt:
{ "syncheader" : {
"servertimesync" : "20131126121749",
"deviceid" : "testDevice"
}
}
тогда в моем случае у меня вопрос:
curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt
сохраняет json более читаемым.
альтернативное решение: более удобное решение, чем командная строка:
Если вы ищете удобный способ отправки и запроса данных использование HTTP-методов, отличных от простых GET, вероятно, вы ищете для расширения chrome так же, как этотhttp://goo.gl/rVW22f вызывается AVANCED REST CLIENT
для парней, желающих остаться с командной строкой, я рекомендую в Cygwin:
Я закончил установку cygwin с завитком, который позволяет нам понимаю, что Linux feeling-на Windows!
с помощью командной строки Cygwin эти проблемы остановились и самое главное, синтаксис запроса на 1. работать отлично.
Полезные ссылки:
где я загружал curl для командной строки windows?
для получения дополнительной информации о том, как установить и получить curl cygwin просто иди сюда
Я надеюсь, что это поможет кому-то, потому что я потратил все утро на это.
- попробуйте использовать двойные кавычки (") вместо одинарными (').
- чтобы сохранить кавычки формата JSON, попробуйте удвоить их ("").
-
чтобы сохранить кавычки внутри данных, попробуйте дважды избежать их, как это (\\"").
curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}" curl ... -d "{""data"": ""data \""abc\"" goes here""}"
по крайней мере, для двоичной версии Windows, которую я тестировал (универсальный Win64 нет-SSL двоичный, в настоящее время на основе 7.33.0), вы подвержены ограничениям в том, как анализируются аргументы командной строки. Ответ xmas описывает правильный синтаксис в этом параметре, который также работает в пакетном файле. Используя приведенный пример:
curl -i -X POST -H "Content-Type: application/json" -d "{""data1"":""data goes here"",""data2"":""data2 goes here""}" http:localhost/path/to/api
более чистая альтернатива, чтобы избежать необходимости иметь дело с экранированными символами, которые зависят от того, что библиотека используется для разбора командной строки, чтобы иметь стандартный текст формата json в отдельном файле:
curl -i -X POST -H "Content-Type: application/json" -d "@body.json" http:localhost/path/to/api