командная строка curl POST в службе Windows RESTful

моя проблема: Использование инструмента командной строки для сворачивания моего сервера localhost при отправке некоторых данных вместе с моим запросом POST не работает.

что, кажется, вызывает ошибку: Представьте себе что-то подобное

  1. 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 просто иди сюда

Я надеюсь, что это поможет кому-то, потому что я потратил все утро на это.


  1. попробуйте использовать двойные кавычки (") вместо одинарными (').
  2. чтобы сохранить кавычки формата JSON, попробуйте удвоить их ("").
  3. чтобы сохранить кавычки внутри данных, попробуйте дважды избежать их, как это (\\"").

    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