enrolar -GET e -X GET

126

O Curl oferece uma série de chamadas de método http diferentes que são prefixadas com um X, mas também oferecem os mesmos métodos sem. Eu tentei os dois e não consigo descobrir a diferença. Alguém pode me explicar rapidamente como essas duas operações diferem?

Matsko
fonte

Respostas:

263

Por padrão, você usa curl sem dizer explicitamente qual método de solicitação usar. Se você acabou de passar um URL HTTP, curl http://example.comele usará GET. Se você usar -dou -Fenrolar usará o POST, -Icausará uma CABEÇA e-T fará uma COLOCAÇÃO.

Se, por qualquer motivo, você não estiver satisfeito com essas opções padrão que a curvatura faz por você, você pode substituir esses métodos de solicitação especificando -X [WHATEVER]. Dessa forma, você pode, por exemplo, enviar um DELETE fazendocurl -X DELETE [URL] .

Portanto, é inútil fazer curl -X GET [URL]como GET seria usado de qualquer maneira. Da mesma maneira, não faz sentido fazer isso. curl -X POST -d data [URL]...Mas você pode fazer uma solicitação divertida e um tanto rara que envia um corpo de solicitação em uma solicitação GET com algo comocurl -X GET -d data [URL] .

Indo mais fundo

curl -GET(usando um único traço) está errado para esse fim. Isso é o equivalente a especificar o -G, -Ee-T opções e que vai fazer algo completamente diferente.

Há também uma opção de ondulação chamada --getpara não confundir as questões. É a forma longa de -G, usada para converter dados especificados com-d em uma solicitação GET em vez de um POST.

(Subseqüentemente, usei minha própria resposta aqui para preencher as perguntas frequentes de curl para cobrir esta .)

Advertências

As versões modernas do curl informarão os usuários sobre esse uso desnecessário e potencialmente prejudicial de -X quando o modo detalhado estiver ativado ( -v) - para conscientizar os usuários. Mais explicado e motivado nesta postagem do blog .

-G converte um corpo POST + em uma consulta GET +

Você pode pedir ao curl para converter um conjunto de -dopções e, em vez de enviá-las no corpo da solicitação com POST, colocá-las no final da string de consulta da URL e emitir um GET, com o uso de `-G. Como isso:

curl -d name=daniel -d grumpy=yes -G https://example.com/
Daniel Stenberg
fonte
5
-XGET pode não funcionar, mas o torna explícito.
Mtyson
"Por padrão, você usa curl sem dizer explicitamente qual método de solicitação usar. Se você passar um URL HTTP como curl example.com, ele usará GET. Se você usar -d ou -F curl usará POST, -I causará uma cabeça e -T fará com que seja colocado ". Tudo o que você precisa saber.
Donato
4
Explícito é melhor que implícito sempre que você tiver a opção. Falhe cedo, falhe rápido, reduz acidentes, reduz o tempo de depuração. A única vez que você tem uma desculpa para ignorá-lo é digitando-o na linha de comando. Qualquer script deve especificar -XGET mesmo quando estritamente desnecessário.
Gamão
1
@ Gamão, se o fizerem, estão fazendo errado. Mas claro, eles podem.
Daniel Stenberg
2

-X [seu método]
X permite substituir o padrão 'Get'

** corrigido em minúsculas xpara maiúsculasX

hoogw
fonte
2
Isso nem tenta responder à pergunta "como essas duas operações diferem".
Melebius 28/02/19
1

O uso de -X [WHATEVER]apenas altera a sequência de métodos da solicitação usada na solicitação HTTP. Isso é mais fácil de entender com dois exemplos - um com -X [WHATEVER]e um sem - e os cabeçalhos de solicitação HTTP associados a cada um:

# curl -XPANTS -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.224.86.126) port 80 (#0)
> PANTS / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*

# curl -o nul -v http://neverssl.com/
* Connected to neverssl.com (13.33.50.167) port 80 (#0)
> GET / HTTP/1.1
> Host: neverssl.com
> User-Agent: curl/7.42.0
> Accept: */*
Jimadine
fonte