Командная строка cURL POST в службе WINDOWS RESTful
Моя проблема:
Запуск окон 7 и использование исполняемого инструмента командной строки для завивки моего localhost-сервера api для данных POST возвращает мне ошибку, которая, по-видимому, очень распространена.
Запрос отправляется должным образом, за исключением того, что данные не попадали на сервер, так как он должен заставлять мою службу REST вставлять данные с нулевыми значениями.
Что, по-видимому, вызывает ошибку:
представьте себе что-то вроде этого
-
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
Итак, я сдался.
Кажется, что Windows сталкивается с объектом JSON, отправленным на POST
Ответы
Ответ 1
Я столкнулся с той же проблемой на своем ноутбуке win7 x64 и смог заставить ее работать с помощью curl-версии, обозначенной Win64 - Generic 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\"}"
который отличается от вашей второй версии побега, используя двойные кавычки вокруг экранированных и значение параметра заголовка. Определенно предпочитают синтаксис оболочки Linux больше.
Ответ 2
Другой альтернативой для командной строки, которая легче, чем борьба с кавычками, является включение json в файл и использование префикса @параметров завитка, например. в json.txt:
{ "syncheader" : {
"servertimesync" : "20131126121749",
"deviceid" : "testDevice"
}
}
то в моем случае я выдаю:
curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt
Сохраняет json более читабельным.
Ответ 3
Альтернативное решение: более удобное решение, чем в командной строке:
Если вы ищете удобный для пользователя способ отправки и запроса данных используя HTTP-методы, кроме простого GET, вероятно, вы ищете для расширения хром точно так же, как этот http://goo.gl/rVW22f, называемый КЛИЕНТ AVANCED REST
Для парней, которые хотят остаться с командной строкой, я рекомендую cygwin:
Я закончил установку cygwin с CURL, который позволяет нам получить, что Чувство Linux - в Windows!
Используя командную строку Cygwin, эти проблемы прекратились и, что самое важное, синтаксис запроса, используемый для 1. работал нормально.
Полезные ссылки:
Где я загружал завиток для командной строки Windows?
Для получения дополнительной информации о том, как установить и заставить завиток работать с cygwin просто идите здесь
Надеюсь, это поможет кому-то, потому что я провел все утро на этом.
Ответ 4
Как минимум для двоичной версии Windows, которую я тестировал, (Generic Win64 no-SSL binary, в настоящее время основанный на 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
Ответ 5
- Попробуйте использовать двойные кавычки (") вместо одиночных (').
- Чтобы сохранить кавычки формата JSON, попробуйте удвоить их ("").
-
Чтобы сохранить кавычки внутри данных, попробуйте их дважды сбежать (\\ "").
curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}"
curl ... -d "{""data"": ""data \\""abc\\"" goes here""}"