使用GET调用将json作为数据发送

时间:2015-04-28 16:39:28

标签: java curl httpurlconnection restlet

我可以看到以下curl命令可以远程工作:

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)将POST请求中的指定数据发送到HTTP服务器,   与用户填写HTML时浏览器的操作方式相同   表单并按下提交按钮。这将导致卷曲通过   使用content-type将数据发送到服务器   应用程序/ x-WWW窗体-urlencoded。比较-F, - form。

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

此外,还没有HttpUrlConnection方法 OR Restlet方法在GET调用中发送json。有吗?

1 个答案:

答案 0 :(得分: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}

因此,这个命令实际上会导致curl发送带有消息体的GET请求。

This question对使用GET和请求正文进行了广泛的讨论。答案同意,向邮件正文发送GET请求实际上并不违法,但您不能指望服务器注意正文。您使用的特定服务器似乎处理这些请求,无论是由于错误,意外事故还是故意的设计决策。