WINDOWS RESTful服务上的cURL POST命令行

Lot*_*re1 57 windows api post command-line curl

我的问题: 使用命令行工具卷曲我的本地主机服务器,同时发送一些数据和我的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
Run Code Online (Sandbox Code Playgroud)

经过一番搜索,我发现问题不能是用于请求的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 go here \"}' http:// localhost/path/to/api

3.

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

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

小智 111

我在win7 x64笔记本电脑上遇到了同样的问题,并且能够通过使用非常相似的命令行格式使用标记为Win64 - 通用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\"}"
Run Code Online (Sandbox Code Playgroud)

这与您的第二个转义版本不同,它使用转义的参数值和标题参数值周围的双引号.绝对更喜欢linux shell语法.


wwk*_*udu 45

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

{ "syncheader" : {
    "servertimesync" : "20131126121749",
    "deviceid" : "testDevice"
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的情况下,我发出:

curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt
Run Code Online (Sandbox Code Playgroud)

保持json更具可读性.


Lot*_*re1 16

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

如果您正在寻找一种用户友好的方式来使用HTTP方法发送和请求数据而不是简单的GET,那么您可能正在寻找一个类似于这个http://goo.gl/rVW22f称为 AVANCED REST CLIENT的Chrome扩展

对于想要使用命令行的人,我推荐cygwin:

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

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

有用的链接:

我在哪里下载curl for windows命令行?

有关如何安装和获取使用cygwin的卷曲的更多信息,请转到此处

我希望它对某人有所帮助,因为我整个上午都在这上面.

  • 这不应该是公认的答案。OP 没有要求推荐基于 Web 的 REST 客户端或替代命令行客户端。他们请求帮助获得正确的curl转义,用户1683523回答了这个问题。 (2认同)
  • 但这对于许多问这个问题的人来说是一个更好的答案。 (2认同)

mys*_*egg 9

至少对于我测试过的Windows二进制版本(通用Win64 no-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
Run Code Online (Sandbox Code Playgroud)

避免必须处理转义字符的更干净的选择是,将标准json格式的文本放在单独的文件中,而转义字符取决于用于解析命令行的库,而转义字符取决于该库。

curl -i -X POST -H "Content-Type: application/json" -d "@body.json" http:localhost/path/to/api
Run Code Online (Sandbox Code Playgroud)


小智 6

  1. 尝试使用双引号 (") 而不是单引号 (')。
  2. 要保留 JSON 格式的引号,请尝试将它们加倍 ("")。
  3. 要保留数据中的引号,请尝试像这样 (\\"") 对它们进行双重转义。

    curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}"
    curl ... -d "{""data"": ""data \\""abc\\"" goes here""}"
    
    Run Code Online (Sandbox Code Playgroud)