2015-04-28 67 views
0

我可以看到下面的curl命令进行远程操作:发送JSON数据与GET调用

curl -X GET -d '{"begin":22, "end":33}' http://myRemoteApp.com:8080/publicApi/user/test/data 

但是按照该文档在http://curl.haxx.se/docs/manpage.html

-d,--data

(HTTP)发送在以同样的方式,一个浏览器,当用户已经填充在一个HTML 形式,并按下POST请求发送到HTTP服务器, 指定数据的提交,但是吨。这将导致curl将 数据传递给使用内容类型 application/x-www-form-urlencoded的服务器。与-F,--form比较。

那么,如果我们使用-d发布数据,GET如何处理curl?

还没有HttpUrlConnection方法ORRestlet方法在GET呼叫发送JSON。在那儿 ?

+0

的可能重复[如何从终端/命令行POST,卷曲JSON数据来测试弹簧安置?](http://stackoverflow.com/questions/7172784/how-to-post-json-data-with-curl - 从端子用命令行对测试弹簧休息) –

+0

@GauravDave:不,我不认为这是一个重复的。 – Makoto

+0

这是一个不寻常的HTTP请求,但有些服务器显然接受它。 –

回答

3

根据curl文档,-X强制将方法字设置为特定值,而不管它是否产生合理的请求。我们可以跟踪,看看它实际上在这种情况下,将运行curl

$ curl -X GET -d '{"begin":22, "end":33}' --trace-ascii - http://localhost:8080/ 
== Info: About to connect() to localhost port 8080 (#0) 
== Info: Trying ::1... == Info: connected 
== Info: Connected to localhost (::1) port 8080 (#0) 
=> Send header, 238 bytes (0xee) 
0000: GET/HTTP/1.1 
0010: User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 
0050: NSS/3.14.3.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 
0084: Host: localhost:8080 
009a: Accept: */* 
00a7: Content-Length: 22 
00bb: Content-Type: application/x-www-form-urlencoded 
00ec: 
=> Send data, 22 bytes (0x16) 
0000: {"begin":22, "end":33} 

所以这个命令事实上确实造成卷曲发了邮件正文的GET请求。

This question具有使用GET与请求身体的某些广泛的讨论。答案同意,发送带有消息正文的GET请求实际上不是非法的,但您不能指望服务器关注正文。看来你正在使用其特定的服务器确实处理这些请求,无论是由于一个错误,幸运的意外,或故意设计决策。

+0

GET请求 - 身体是一个完全有效的HTTP请求。不寻常的。 –