2012-11-14 163 views
92

我试图使用CURL发送带有url参数的DELETE请求。我做:CURL命令行URL参数

curl -H application/x-www-form-urlencoded -X DELETE http://localhost:5000/locations` -d 'id=3' 

但是,服务器中是不多见的参数ID = 3,我试着用一些GUI应用程序,当我通过网址为:http://localhost:5000/locations?id=3,它的工作原理。我真的宁愿使用CURL而不是这个GUI应用程序。任何人都可以请指出我做错了什么?

回答

149

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

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

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

它工作。我刚刚意识到URL必须在引号之间才能接受参数。该MIME类型适用于带有参数的URL,并且这是GUI应用程序使用的内容。另外,我不想做'GET'。我想'DELETE'而不是'GET',我想遵循适当的REST设计标准,所以我在删除时使用DELETE而不是GET。 – darksky

+1

在我的情况下,它只适用于双引号,用单引号说 curl:(1)协议'http不支持或禁用libcurl 但引用工作得很好。 –

73

Felipsmartins是正确的。

值得一提的是,这是因为如果这不是POST请求,您不能真正使用-d/- 数据选项。但是如果你使用-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可以让你一行一行。 (只是说)

希望它有帮助。

+6

拯救生命!谢啦!我有一个脚本,我想在GET上使用--data-urlencode。这使得我不必手动对我的参数进行网址编码。谢谢! –

+0

您是否暗示-X DELETE -G确实是POST请求? – huggie

-6

如果你的参数是一个数字,那么你也可以这样做:

curl -X DELETE localhost:5000/locations/3

其中 '3' 是你参数

+6

这完全取决于服务器的实现。 – Tim