WINDOWS RESTful服务上的cURL POST命令行

我的问题:

运行Windows 7和使用可执行的命令行工具来curl我的本地主机服务器api POST数据是返回给我一个错误,似乎是非常普遍的。

请求正在正确发送,但数据未到达服务器,因为它会导致我的REST服务插入空值的数据。

什么似乎是造成这个错误:想像这样的事情

  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 

经过一番search,我发现这个问题不可能是用于请求的sintax,因为它在UNIX shell上工作。

你可能使用Windows? 这看起来像一个完全破碎的shell,不能正确处理单引号和双引号。 我只是试过这个命令行,它在我的Linux机器上工作得很好。 http://curl.haxx.se/mail/archive-2011-03/0066.html

我试图解决那些“逃避它”,但它仍然没有工作

2。

curl -i -X POST -H'Content-Type:application / json'-d'{\“data1 \”:\“data goes here \”,\“data2 \”:\“data2 goes here \”} http:// localhost / path / to / api

3。

curl -i -X POST -H'Content-Type:application / json'-d'{\“data1 \”:\“data goes here \”,\“data2 \”:\“data2 goes here \”} http:// localhost / path / to / api

所以我放弃了。 Windows似乎搞乱了在POST上发送的JSON对象

我在我的win7 x64笔记本电脑上遇到了同样的问题,并能够使用非常类似的命令行格式使用标签为Win64 – Generic w SSL的curl发行版来工作:

 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 shell语法。

另一个比命令行更容易使用的替代方法是将json放入一个文件中,并使用curl参数的@前缀,例如在json.txt中使用以下内容:

 { "syncheader" : { "servertimesync" : "20131126121749", "deviceid" : "testDevice" } } 

那么在我的情况下,我问:

 curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt 

让json更易读。

替代解决scheme:比命令行更友好的解决scheme:

如果您正在寻找一种用户友好的方式来发送和请求数据使用HTTP方法,而不是简单的GET可能你正在寻找铬扩展就像这样一个http://goo.gl/rVW22f称为;AVANCED REST客户端

对于希望留在命令行的人,我推荐cygwin:

我最终用CURL安装了cygwin,这使我们能够在Windows上获得Linux的感觉!

使用Cygwin命令行,这个问题已经停止,最重要的是,1.上使用的请求语法工作正常。

有用的链接:

我在哪里下载curl的Windows命令行?

有关如何安装和使用cygwin的curl工作的更多信息,请点击这里

我希望它能帮助别人,因为我整个上午都在这上面。

至less对于我testing的Windows二进制版本( 通用Win64无SSL二进制文件 ,目前基于7.33.0 ),受限于如何parsing命令行参数。 xmas的答案描述了该设置中的正确语法,这也适用于batch file。 使用提供的示例:

 curl -i -X POST -H "Content-Type: application/json" -d "{""data1"":""data goes here"",""data2"":""data2 goes here""}" http:localhost/path/to/api 

避免必须处理转义字符(取决于用于parsing命令行的任何库)的更简洁的替代方法是将标准json格式文本放在单独的文件中:

 curl -i -X POST -H "Content-Type: application/json" -d "@body.json" http:localhost/path/to/api 
  1. 尝试使用双引号(“)而不是单个(')。
  2. 要保留JSON格式的引号,请尝试加倍(“”)。
  3. 为了保存数据中的引号,请尝试像这样(\\“”)双重转义它们。

     curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}" curl ... -d "{""data"": ""data \\""abc\\"" goes here""}"