【问题标题】:Curl GET with JSON parametr. Empty reply from server使用 JSON 参数卷曲 GET。来自服务器的空回复
【发布时间】:2015-10-23 16:46:58
【问题描述】:

curl 命令有问题。我想使用 JSON 参数发送请求 (GET),我应该从服务器得到一些答案,但不幸的是我什么也没得到。 在最好的情况下,我得到下面的答案表单服务器

* Hostname was NOT found in DNS cache
*   Trying 192.168.1.101...
* Connected to 192.168.1.101 (192.168.1.101) port 80 (#0)
> GET /ckk.cgi HTTP/1.1
> User-Agent: curl/7.38.0
> Host: 192.168.1.101
> Accept: application/json
> Content-type: application/json
> Content-Length: 41
> 
* upload completely sent off: 41 out of 41 bytes
* Empty reply from server
* Connection #0 to host 192.168.1.101 left intact
curl: (52) Empty reply from server

我阅读了以下主题:

Curl GET request with json parameter How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?

所以我尝试了下面的命令

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET 192.168.1.101/ckk.cgi?json={"asking1":{"001":"givnames1","_id":223}}

curl -H "Content-Type: application/json" -X GET -d '{"asking1":{"001":"givnames1","_id":223}}' http://192.168.1.101/ckk.cgi?

curl -X GET -H "application/json" -d '{"asking1":{"001":"givnames1","_id":223}}' http://192.168.1.101/ckk.cgi?

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X GET -d '{"asking1":{"001":"givnames1","_id":223}}' http://192.168.1.101/ckk.cgi?

curl -i GET -H "Accept: application/json" "http://192.168.1.101/ckk.cgi??json={"asking1":{"001":"givnames1","_id":223}}"

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET -d '{"asking1":{"001":"givnames1","_id":223}}}' 

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET -d "{"asking1":{"001":"givnames1","_id":223}}" http://192.168.1.101/ckk.cgi?

curl --data "{"asking1":{"001":"givnames1","_id":223}}}" http://192.168.1.101/ckk.cgi?

curl -v  http://192.168.1.101/ckk.cgi? --header "Content-Type: application/json" -d "{"asking1":{"001":"givnames1","_id":223}}"

所有命令都不起作用....

浏览器中的Works命令只是:

192.168.1.101/ckk.cgi?json={"asking1":{"001":"givnames1","_id":223}}

编辑:

下面的问题答案

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET 192.168.1.101/ckk.cgi?json={"asking1":{"001":"givnames1","_id":223}}

HTTP/1.1 200 OK
Date: Sat, 24 Oct 2015 04:58:11 GMT
Server: Apache/2.4.12 (Unix) OpenSSL/1.0.2c
Content-Length: 0
Content-Type: text/html;charset=utf-8

HTTP/1.1 200 OK
Date: Sat, 24 Oct 2015 04:58:16 GMT
Server: Apache/2.4.12 (Unix) OpenSSL/1.0.2c
Content-Length: 0
Content-Type: text/html;charset=utf-8

 curl -vv -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET 192.168.1.101/ckk.cgi?json={"asking1":{"001":"givnames1","_id":223}}

* Hostname was NOT found in DNS cache
*   Trying 192.168.1.101...
* Connected to 192.168.1.101 (192.168.1.101) port 80 (#0)
> GET /skk.cgi?json=asking1:001:givname1 HTTP/1.1
> User-Agent: curl/7.38.0
> Host: 192.168.1.101
> Accept: application/json
> Content-Type: application/json
> 
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Sat, 24 Oct 2015 05:33:39 GMT
Date: Sat, 24 Oct 2015 05:33:39 GMT
* Server Apache/2.4.12 (Unix) OpenSSL/1.0.2c is not blacklisted
< Server: Apache/2.4.12 (Unix) OpenSSL/1.0.2c
Server: Apache/2.4.12 (Unix) OpenSSL/1.0.2c
< Content-Length: 0
Content-Length: 0
< Content-Type: text/html;charset=utf-8
Content-Type: text/html;charset=utf-8

< 
* Connection #0 to host 192.168.1.101 left intact
* Found bundle for host 192.168.1.101: 0x7f53c7dbb5a0
* Re-using existing connection! (#0) with host 192.168.1.101
* Connected to 192.168.1.101 (192.168.1.101) port 80 (#0)
> GET /ckk.cgi?json=asking:_id:223 HTTP/1.1
> User-Agent: curl/7.38.0
> Host: 192.168.1.101
> Accept: application/json
> Content-Type: application/json
> 
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Sat, 24 Oct 2015 05:33:44 GMT
Date: Sat, 24 Oct 2015 05:33:44 GMT
* Server Apache/2.4.12 (Unix) OpenSSL/1.0.2c is not blacklisted
< Server: Apache/2.4.12 (Unix) OpenSSL/1.0.2c
Server: Apache/2.4.12 (Unix) OpenSSL/1.0.2c
< Content-Length: 0
Content-Length: 0
< Content-Type: text/html;charset=utf-8
Content-Type: text/html;charset=utf-8

< 
* Connection #0 to host 192.168.1.101 left intact

【问题讨论】:

  • 我建议在 url 中正确地百分比转义参数值,即。 192.168.1.101/ckk.cgi?json=%7B"asking1"%3A%7B"001"%3A"givnames1","_id"%3A223%7D%7D(冒号和左/右大括号转义)。 RFC 3986 是相关标准。
  • 我尝试了curl -v -H "Accept: application/json" -H "Content-type: application/json" -X GET -d '%7B"asking1"%3A%7B"001"%3A"givnames1","_id"%3A223%7D‌​%7D' http://192.168.1.101/ckk.cgi,然后我得到了与上面相同的答案,还尝试了curl 192.168.1.101/ckk.cgi?json=%7B"asking1"%3A%7B"001"%3A"givnames1","_id"%3A223%7D‌​%7D,然后我什么也没得到。
  • 下次尝试使用curl -vvv。它将提供一个非常详细的输出,可能会帮助您找到解决方案。
  • 我在 edit 中使用 -vv 后添加了内容显示

标签: json curl


【解决方案1】:

查看工作浏览器场景通过网络发送的内容将显示如下内容:

192.168.1.101/ckk.cgi?json={%22asking1%22:{%22001%22:%22givnames1%22,%22_id%22:223}}

即JSON 部分得到 URL 编码(至少部分是这样)。使用--data-urlencode-G 标志可以达到相同的效果:

curl -G -v "http://192.168.1.101/ckk.cgi" --data-urlencode 'json={"asking1":{"001":"givnames1","_id":223}}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 2012-06-16
    • 1970-01-01
    • 2023-03-24
    • 2017-12-22
    • 2015-07-16
    • 1970-01-01
    • 2012-08-10
    相关资源
    最近更新 更多