为什么CURL --data-urlencode不对URL进行编码

时间:2019-11-15 09:38:44

标签: curl

我正在尝试使用curl--data-urlencode--data进行URL编码,但是最终却像curl一样将它们附加到查询中。

可以在netcat的帮助下并针对它进行查询来重现该问题。

示例curl --data-urlencode "foo=bar" 127.0.0.1:8080/test/path POST查询:

$ nc -l 8080
POST /test/path HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: curl/7.58.0
Accept: */*
Content-Length: 7
Content-Type: application/x-www-form-urlencoded

foo=bar

实际输出:

$ nc -l 8080
POST /test/path?foo=bar HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: curl/7.58.0
Accept: */*

预期输出:

     "styles": [
      "src/styles.scss",
      "node_modules/bootstrap/dist/css/bootstrap.min.css"
    ],
    "scripts": [
      "node_modules/jquery/dist/jquery.slim.min.js",
      "node_modules/bootstrap/dist/js/bootstrap.min.js",
      "node_modules/popper.js/dist/umd/popper.min.js"
    ],

1 个答案:

答案 0 :(得分:1)

根据manual--data-urlencode选项“ ...发布数据,类似于其他-d,--data选项”。因此,如果您看到帖子,那就是预期的行为。

您可以使用--get来使curl发出GET请求。另外,-v是一个好朋友!

curl -v --data-urlencode "foo=bar" http://127.0.0.1/test.php
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> POST /test.php HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 7
> Content-Type: application/x-www-form-urlencoded

使用--get

curl -v --get --data-urlencode "foo=bar" http://127.0.0.1/test.php
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET /test.php?foo=bar HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.47.0
> Accept: */*