CURL命令行URL参数


186

我正在尝试DELETE使用CURL 发送带有url参数的请求。我在做:

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应用程序。谁能指出我做错了吗?

Answers:


269

“ application / x-www-form-urlencoded”标头,为什么?试试看:

curl -X DELETE 'http://localhost:5000/locations?id=3'

要么

curl -X GET 'http://localhost:5000/locations?id=3'

30
有效。我只是意识到URL必须在引号之间才能接受参数。该MIME类型用于具有参数的URL,这就是GUI应用程序使用的内容。另外,我也不想做GET。我想要DELETE而不是GET,我正在尝试遵循适当的REST设计标准,因此删除时我使用的是DELETE而不是GET。
darksky

1
在我的情况下,它仅适用于双引号,在curl中使用单引号表示:(1)协议'http在libcurl中不受支持或禁用,但使用“”引号就可以了。
Jeff_Alieffson 2014年

149

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允许您逐行进行操作。(只是说)

希望能帮助到你。


11
救生员!谢啦!我有一个脚本,希望在GET上使用--data-urlencode。这样就做到了,因此我不必手动对参数进行URL编码。谢谢!
内森·华莱士

3
您是否暗示-X DELETE -G实际上是POST请求?
huggie 2014年

1
`-G,--get将帖子数据放入URL并使用GET`不,它只是将帖子数据添加到url,-X [方法]优先(来源:curl --help and experience)
DownloadPizza

这怎么会如此令人费解。可以假定--data-urlencode 毫无例外地将数据添加到URL,但是现在您需要将其与之结合--get以使其真正起作用。
Jaakko,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.