Parâmetros de URL da linha de comando CURL

186

Estou tentando enviar uma DELETEsolicitação com um parâmetro de URL usando CURL. Estou fazendo:

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

No entanto, o servidor não está vendo o parâmetro id = 3. Tentei usar algum aplicativo da GUI e quando passo o URL como:, http://localhost:5000/locations?id=3ele funciona. Eu realmente prefiro usar o CURL do que esse aplicativo GUI. Alguém pode apontar o que estou fazendo de errado?

céu escuro
fonte

Respostas:

269

Cabeçalho "application / x-www-form-urlencoded", por que? Experimente:

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

ou

curl -X GET 'http://localhost:5000/locations?id=3'
felipsmartins
fonte
30
Funcionou. Acabei de perceber que o URL deve estar entre aspas para aceitar parâmetros. Esse tipo MIME é para uma URL com parâmetros e é isso que o aplicativo GUI usa. Além disso, eu não quero fazer GET. Quero DELETEe não GETe estou tentando seguir os padrões de design REST adequados, portanto, estou usando DELETE e não GET ao excluir.
darksky
1
No meu caso, ele funciona apenas com aspas duplas, com aspas simples em diz curl: (1) O http do protocolo não é suportado ou desabilitado na libcurl Mas com a "" citação funciona perfeitamente.
Jeff_Alieffson
150

Felipsmartins está correto.

Vale ressaltar que é porque você realmente não pode usar a opção -d / - data se essa não é uma solicitação POST. Mas isso ainda é possível se você usar a opção -G.

O que significa que você pode fazer isso:

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

Aqui é um pouco bobo, mas quando você está na linha de comando e possui muitos parâmetros, é muito mais organizado.

Estou dizendo isso porque os comandos cURL geralmente são bastante longos, por isso vale a pena fazê-lo em mais de uma linha escapando das quebras de linha.

curl -X DELETE -G \
'http://localhost:5000/locations' \
-d id=3 \
-d name=Mario \
-d surname=Bros

Obviamente, isso é muito mais confortável se você usar o zsh. Quero dizer, quando você precisa reeditar o comando anterior porque o zsh permite que você vá linha por linha. (apenas dizendo)

Espero que ajude.

Mig
fonte
11
Poupança de vida! Valeu cara! Eu tenho um script onde eu quero usar --data-urlencode em um GET. Isso fez com que eu não precisasse codificar manualmente meus parâmetros. Obrigado!
19413 Nathan Wallace
3
Você está sugerindo que -X DELETE -G é realmente uma solicitação POST?
huggie
1
`-G, --get Coloque os dados da postagem na URL e use GET` Não, apenas adicione os dados da postagem ao URL, -X [método] tem precedência (fonte: curl --help and experience)
DownloadPizza
Como isso pode ser tão complicado? Pode-se supor que --data-urlencode os dados sejam adicionados ao URL sem exceções, mas agora você precisa combiná-los --getpara que funcionem.
precisa