web-dev-qa-db-ja.com

curl -GETおよび-X GET

Curlは、Xをプレフィックスとする一連の異なるhttpメソッド呼び出しを提供しますが、同じメソッドもなしで提供します。私は両方を試しましたが、違いを理解できないようです。これらの2つの操作がどのように異なるかを誰かがすぐに説明できますか?

107
matsko

デフォルトでは、使用する要求メソッドを明示的に指定せずにcurlを使用します。 curl http://example.comのようなHTTP URLを渡すだけで、GETが使用されます。 -dを使用する場合、または-F curlがPOSTを使用する場合、-IはHEADを引き起こし、-TはそれをPUTにします。

何らかの理由でcurlが行うこれらのデフォルトの選択に満足できない場合は、-X [WHATEVER]を指定してこれらのリクエストメソッドをオーバーライドできます。この方法では、たとえばcurl -X DELETE [URL]を実行してDELETEを送信できます。

したがって、GETがとにかく使用されるので、curl -X GET [URL]を実行しても意味がありません。同じように、curl -X POST -d data [URL]...を実行しても意味がありませんが、curl -X GET -d data [URL]のようなGETリクエストでリクエストボディを送信する、やや珍しいリクエストを作成できます。

より深く掘る

curl -GET(単一のダッシュを使用)は、この目的にはまったく間違っています。これは -G-E および -T オプションを指定することと同等であり、まったく異なることを行います。

--get と呼ばれるcurlオプションもあり、問題をどちらとも混同しないようにします。これは、-Gの長い形式であり、 -d で指定されたデータをPOSTではなくGETリクエストに変換するために使用されます。

(その後、ここで独自の回答を使用して、 curl FAQを埋めてこれをカバーします 。)

警告

最新バージョンのcurlは、冗長モード(-v)が有効になっているときに-Xの不要で潜在的に有害な使用についてユーザーに通知し、ユーザーに認識させます。 このブログ投稿 でさらに説明し、やる気を起こさせます。

-GはPOST +本文をGET +クエリに変換します

Curlに-dオプションのセットを変換するように依頼し、POSTを使用してリクエスト本文で送信する代わりに、URLのクエリ文字列の最後に追加し、 `-Gを使用してGETを発行します。このような:

curl -d name=daniel -d grumpy=yes -G https://example.com/
227
Daniel Stenberg

-X [あなたの方法]
Xを使用すると、デフォルトの「Get」をオーバーライドできます

**小文字のxを大文字のXに修正しました

2
hoogw