【问题标题】:Sending json as data with GET call使用 GET 调用将 json 作为数据发送
【发布时间】:2015-04-28 16:39:28
【问题描述】:

我可以看到以下 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,--数据

(HTTP) 将 POST 请求中的指定数据发送到 HTTP 服务器, 就像浏览器在用户填写 HTML 时所做的一样 表单并按下提交按钮。这将导致 curl 通过 使用内容类型向服务器发送数据 应用程序/x-www-form-urlencoded。与 -F、--form 比较。

如果我们使用-d 发布数据,那么 GET 如何与 curl 一起工作?

也没有HttpUrlConnection 方法 Restlet 方法在GET 调用中发送json。有吗?

【问题讨论】:

标签: java curl httpurlconnection restlet


【解决方案1】:

根据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 请求实际上并不违法,但您不能指望服务器会注意正文。您正在使用的特定服务器似乎确实处理了这些请求,无论是由于错误、意外事故还是故意的设计决定。

【讨论】:

  • 带有请求正文的 GET 是一个完全有效的 HTTP 请求。只是不寻常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多