Подтвердить что ты не робот

Командная строка 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

4b9b3361

Ответ 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""}"