CURL 命令行 URL 参数
Posted
技术标签:
【中文标题】CURL 命令行 URL 参数【英文标题】:CURL Command Line URL Parameters 【发布时间】:2012-11-02 12:05:56 【问题描述】:我正在尝试使用 CURL 发送带有 url 参数的 DELETE
请求。我在做:
curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3'
但是,服务器没有看到参数 id = 3。我尝试使用一些 GUI 应用程序,当我将 url 传递为:http://localhost:5000/locations?id=3
时,它可以工作。我真的宁愿使用 CURL 而不是这个 GUI 应用程序。谁能指出我做错了什么?
【问题讨论】:
【参考方案1】:application/x-www-form-urlencoded
Content-type 标头不是必需的(嗯,有点取决于)。除非请求处理程序期望来自表单主体的参数。试试看:
curl -X DELETE "http://localhost:5000/locations?id=3"
或
curl -X GET "http://localhost:5000/locations?id=3"
【讨论】:
成功了。我刚刚意识到 URL 必须在引号之间才能接受参数。该 MIME 类型用于带有参数的 URL,这就是 GUI 应用程序使用的。另外,我不想做GET
。我想DELETE
而不是GET
,我正在尝试遵循正确的 REST 设计标准,所以我在删除时使用 DELETE 而不是 GET。
在我的情况下,它只适用于双引号,单引号表示 curl:(1) 协议 'http 在 libcurl 中不受支持或禁用但使用 "" 引号就可以了。
我其实是在Windows环境下。使用单引号对我不起作用。它抛出了一个错误,如“'http”不支持。但是,当我将它们包含在双引号中时它起作用了。【参考方案2】:
Felipsmartins 是正确的。
值得一提的是,如果这不是 POST 请求,则无法真正使用 -d/--data 选项。但是,如果您使用 -G 选项,这仍然是可能的。
这意味着你可以这样做:
curl -X DELETE -G 'http://localhost:5000/locations' -d 'id=3'
这里有点傻,但是当你在命令行上并且你有很多参数时,它会更整洁。
我这样说是因为 cURL 命令通常很长,因此值得在多行上使用它来转义换行符。
curl -X DELETE -G \
'http://localhost:5000/locations' \
-d id=3 \
-d name=Mario \
-d surname=Bros
如果你使用 zsh,这显然会舒服很多。我的意思是当您需要重新编辑上一个命令时,因为 zsh 可以让您逐行执行。 (只是说)
希望对你有帮助。
【讨论】:
救命!谢啦!我有一个脚本,我想在 GET 上使用 --data-urlencode。这样我就不必手动对我的参数进行 url 编码。谢谢! 你是在暗示 -X DELETE -G 真的是一个 POST 请求吗? ` -G, --get 将post数据放到url中,使用GET` 不,只是将post数据添加到url中,-X【方法】优先(来源:curl- -帮助和经验) 怎么会这么复杂。可以假设--data-urlencode
毫无例外地将数据添加到 URL,但现在您需要将其与 --get
结合以使其真正起作用。以上是关于CURL 命令行 URL 参数的主要内容,如果未能解决你的问题,请参考以下文章