Lot*_*re1 57 windows api post command-line curl
我的问题: 使用命令行工具卷曲我的本地主机服务器,同时发送一些数据和我的POST请求不起作用.
似乎导致错误的原因: 想象一下这样的事情
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上使用的请求语法运行正常.
有用的链接:
我希望它对某人有所帮助,因为我整个上午都在这上面.
至少对于我测试过的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
要保留数据中的引号,请尝试像这样 (\\"") 对它们进行双重转义。
curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}"
curl ... -d "{""data"": ""data \\""abc\\"" goes here""}"
Run Code Online (Sandbox Code Playgroud)