curl -GETおよび-X GET


126

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

回答:


263

デフォルトでは、使用するリクエストメソッドを明示的に指定せずにcurlを使用します。このようなHTTP URLを渡すだけの場合は、curl http://example.comGETを使用します。を使用する-dか、-FcurlがPOSTを使用-Iすると、HEADが発生-Tし、PUTになります。

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

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

より深く掘る

curl -GET(単一のダッシュを使用)は、この目的のために間違っています。これは、指定するのと同じだ-G-E-Tオプションと、それは完全に別の何かを行います。

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

(その後、私は自分の回答をここで使用して、これをカバーするためにcurl FAQを入力しました。)

警告

curlの最新バージョンは、冗長モードが有効になっている場合(-v-)に-Xを使用することでユーザーにこのことを知らせ、ユーザーに注意を喚起します。このブログ投稿でさらに説明され、動機付けられました。

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

一連の-dオプションを変換するようにcurlに要求し、POSTを使用してそれらをリクエスト本文で送信する代わりに、それらをURLのクエリ文字列の最後に配置し、 `-Gを使用してGETを発行できます。このような:

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

5
-XGETは何もしない場合がありますが、明示的にします。
mtyson 2016

「デフォルトでは、使用するリクエストメソッドを明示せずにcurlを使用します。curlexample.comのようなHTTP URLを渡すだけの場合は、GETを使用します。-dまたは-F curlを使用すると、-Iが発生します。ヘッドと-TはそれをPUTにします。」あなたが知る必要があるすべて。
Donato

4
オプションがある場合は、明示的の方が暗黙的よりも優れています。早期に失敗し、すぐに失敗し、事故を減らし、デバッグ時間を減らします。スキップする言い訳ができるのは、コマンドラインに入力するときだけです。絶対に不要な場合でも、スクリプトでは-XGETを指定する必要があります。
バックギャモン2019

1
@Backgammonもしそうなら、彼らはそれを間違っています。しかし、確かに可能です。
ダニエルステンバーグ

2

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

**小文字xから大文字に修正X


2
これは、「これら2つの操作がどのように異なるのか」という質問にも答えようとはしません。
メレビウス

1

の使用は、HTTPリクエストで使用される-X [WHATEVER]リクエストのメソッド文字列を変更するだけです。これは、2つの例(1つあり-X [WHATEVER]、1つあり、なし)と、それぞれに関連付けられたHTTP要求ヘッダーを使用すると、より簡単に理解できます。

# 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: */*
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.