cURL は、クライアントとサーバー、またはインターネット経由で接続された任意の 2 台のマシンの間でデータを送受信するために使用できるコマンド ライン ツールおよびライブラリです。 HTTP、FTP、IMAP、LDAP、POP3、SMTP などの幅広いプロトコルをサポートしています。
cURL は汎用性があるため、多くのアプリケーションやユースケースで使用されています。たとえば、コマンド ライン ツールを使用して、ファイルをダウンロードし、API をテストし、ネットワークの問題をデバッグできます。この記事では、cURL コマンド ライン ツールを使用してさまざまなタスクを実行する方法について説明します。
目次
- 1 cURL をインストールします
- 1.1 Linux
- 1.2 MacOS
- 1.3 ウィンドウ
- 2 cURL の基本的な使い方
- 3 cURL によるファイルのダウンロード
- 4 HTTP リクエスト / レスポンスの構造
- 5 cURL によるリダイレクトの追跡
- 6 cURL を使用した応答ヘッダーの表示
- 7 リクエスト ヘッダーと接続の詳細を表示する
- 8 つのサイレンシング エラー
- 9 cURL を使用した HTTP リクエスト ヘッダーの設定
- 10 cURL を使用した POST リクエストの作成
- 11 cURL を使用した JSON データの送信
- 12 リクエスト方法の変更
- 13 cURL を使用したブラウザ リクエストの複製
- 14 HTTP エラーで cURL を失敗させる
- 15 cURL による認証済みリクエストの作成
- 16 cURL によるプロトコル サポートのテスト
- 17 ホスト ヘッダーと cURL の -resolve オプションの設定
- 18 ドメインを IPv4 および IPv6 アドレスに解決する
- 19 cURL の証明書チェックを無効にする
- 20 「cURL タイミング内訳」によるウェブサイトの問題のトラブルシューティング
- 21 個の cURL 構成ファイル
- 22 まとめ
cURL をインストール
Linux
ほとんどの Linux ディストリビューションには、デフォルトで cURL がインストールされています。システムにインストールされているかどうかを確認するには、curl
と入力します。 をターミナル ウィンドウで入力し、Enter キーを押します。インストールされていない場合は、「コマンドが見つかりません」というエラーが表示されます。以下のコマンドを使用して、システムにインストールしてください。
Ubuntu/Debian ベースのシステムの場合:
sudo apt update sudo apt install curl
CentOS/RHEL システムの場合は、次を使用します:
sudo yum install curl
一方、Fedora システムでは、次のコマンドを使用できます:
sudo dnf install curl
MacOS
MacOS には cURL がプリインストールされており、Apple が OS のアップデートをリリースするたびにアップデートを受け取ります。ただし、cURL の最新バージョンをインストールする場合は、curl
をインストールできます。 自作パッケージ。 Homebrew をインストールしたら、次の方法でインストールできます。
brew install curl
窓
Windows 10 バージョン 1803 以降では、cURL がデフォルトでコマンド プロンプトに表示されるようになったため、そこから直接使用できます。古いバージョンの Windows の場合、cURL プロジェクトには Windows バイナリがあります。 ZIP ファイルをダウンロードして解凍すると、curl-<version number>-mingw
という名前のフォルダーが見つかります。 .このフォルダを任意のディレクトリに移動します。この記事では、フォルダーの名前が curl-7.62.0-win64-mingw
であると仮定します。 、 C:
の下に移動しました .
次に、cURL の bin
を追加する必要があります ディレクトリを Windows PATH
に curl
と入力したときに Windows がそれを見つけることができるように、環境変数 コマンドプロンプトで。これを機能させるには、次の手順に従う必要があります:
systempropertiesadvanced
を実行して、[システムの詳細プロパティ] ダイアログを開きます。 Windows の [ファイル名を指定して実行] ダイアログ (Windows キー + R) から- [環境変数] ボタンをクリックします。
- [システム変数] セクションの [パス] をダブルクリックし、パス
C:curl-7.62.0-win64-mingwbin
を追加します。 . Windows 10 の場合、右側の「新規」ボタンでこれを行うことができます。古いバージョンの Windows では、;C:curl-7.62.0-win64-mingwbin
と入力できます。 (最初のセミコロンに注意してください) [値] テキスト ボックスの最後に。
上記の手順を完了したら、curl
と入力できます。 これが機能しているかどうかを確認します。すべてがうまくいった場合、次の出力が表示されます:
C:UsersAdministrator>curl curl: try 'curl --help' or 'curl --manual' for more information
cURL の基本的な使い方
cURL を使用する基本的な構文は次のとおりです。
curl <url>
これにより、指定された URL で利用可能なコンテンツが取得され、端末に出力されます。たとえば、curl example.com
を実行すると 、以下に示すように、印刷された HTML ページを確認できるはずです:
これは、cURL が実行できる最も基本的な操作です。次のいくつかのセクションでは、cURL で使用できるさまざまなコマンド ライン オプションについて説明します。
cURL によるファイルのダウンロード
これまで見てきたように、cURL は URL コンテンツを直接ダウンロードし、それを端末に出力します。ただし、出力をファイルとして保存する場合は、-o
でファイル名を指定できます。 オプション、次のように:
curl -o vlc.dmg https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
コンテンツを保存するだけでなく、cURL は速度や所要時間などのダウンロード統計を含む素敵なプログレス バーを表示するように切り替えます。
ファイル名を手動で指定する代わりに、cURL に -O
を使用してファイル名を認識させることができます。 オプション。したがって、上記の URL をファイル vlc-3.0.4.dmg
に保存する場合は、 、あなたは単に使用することができます:
curl -O https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
-o
を使用する場合は、 または -O
オプションと同じ名前のファイルが存在する場合、cURL はそれを上書きします。
部分的にダウンロードしたファイルがある場合は、-C -
でファイルのダウンロードを再開できます 以下に示すように、オプション:
curl -O -C - https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
他のほとんどのコマンド ライン ツールと同様に、さまざまなオプションを組み合わせることができます。たとえば、上記のコマンドでは、-O -C -
を組み合わせることができます -OC -
のように記述します。 .
HTTP リクエスト/レスポンスの構造
cURL でサポートされている機能を深く掘り下げる前に、HTTP 要求と応答について少し説明します。これらの概念に精通している場合は、他のセクションに直接スキップしてください。
Web ページなどのリソースを要求したり、サーバーにデータを送信したりするために、HTTP クライアント (ブラウザーや cURL など) はサーバーに HTTP 要求を行います。サーバーは HTTP 応答で応答します。
HTTP リクエストには、「リクエスト ボディ」の一部として、リクエスト メソッド、URL、いくつかのヘッダー、およびいくつかのオプション データが含まれます。リクエスト メソッドは、特定のリクエストの処理方法を制御します。リクエストメソッドの最も一般的なタイプは「GET」と「POST」です。通常、「GET」リクエストを使用してサーバーからリソースを取得し、「POST」を使用してデータをサーバーに送信して処理します。通常、「POST」リクエストには、サーバーが使用できるデータがリクエスト本文に含まれています。
HTTP 応答も同様で、ステータス コード、いくつかのヘッダー、および本文が含まれています。本文には、クライアントが表示またはファイルに保存できる実際のデータが含まれます。ステータス コードは 3 桁のコードで、リクエストが成功したか失敗したかをクライアントに通知し、さらにどのように処理を進めるべきかを示します。一般的なステータス コードは、2xx (成功)、3xx (別のページにリダイレクト)、および 4xx/5xx (エラー) です。
HTTP は「アプリケーション層プロトコル」であり、TCP と呼ばれる別のプロトコル上で実行されます。失われたデータの再送信を処理し、クライアントとサーバーが最適な速度でデータを送信できるようにします。 HTTPS を使用すると、TCP と HTTP の間で SSL/TLS と呼ばれる別のプロトコルが実行され、データが保護されます。
ほとんどの場合、google.com
などのドメイン名を使用します ウェブサイトにアクセスします。ドメイン名の IP アドレスへのマッピングは、DNS と呼ばれる別のプロトコルを通じて行われます。
これで、この記事の残りの部分を理解するのに十分な背景知識が得られたはずです.
cURL によるリダイレクトの追跡
デフォルトでは、cURL がリクエストを行った後にリダイレクトを受け取った場合、新しい URL へのリクエストは自動的には行われません。この例として、URL https://www.facebook.com
を考えてみます。 .この URL を使用してリクエストを行うと、サーバーは HTTP 3XX リダイレクトを https://www.facebook.com/
に送信します。 .ただし、それ以外の場合、応答本文は空です。したがって、これを試してみると、空の出力が得られます:
cURL にこれらのリダイレクトをたどらせたい場合は、-L
を使用する必要があります。 オプション。繰り返す場合は https://www.facebook.com/
をリクエストしてください -L
で フラグ、次のように:
curl -L https://www.facebook.com/
これで、下のスクリーンショットのように、ページの HTML コンテンツを表示できるようになります。次のセクションでは、HTTP 3XX リダイレクトがあることを確認する方法について説明します。
cURL は、サーバーが「HTTP リダイレクト」で応答した場合にのみリダイレクトを追跡できることに注意してください。これは、サーバーが 3XX ステータス コードを使用し、新しい URL を示すために「Location」ヘッダーを使用したことを意味します。 cURL は、Javascript または HTML ベースのリダイレクト メソッド、または「リフレッシュ ヘッダー」を処理できません。
リダイレクトのチェーンがある場合、-L
オプションは、最大 500 回のリダイレクトのみに従います。 --max-redirs
を使用して、リダイレクトの最大数を制御できます。
curl -L --max-redirs 700 example.com
このフラグを -1
に設定すると 、リダイレクトを際限なくたどります。
curl -L --max-redirs -1 example.com
cURL で応答ヘッダーを表示する
Web サイトの問題をデバッグする場合、サーバーから送信された HTTP 応答ヘッダーを表示することができます。この機能を有効にするには、-i
を使用できます オプション。
前の例を続けて、https://www.facebook.com/
への HTTP リクエストを作成したときに HTTP 3XX リダイレクトが実際にあることを確認します。 、次を実行:
curl -L -i https://www.facebook.com/
-L
も使用していることに注意してください cURL がリダイレクトをたどることができるようにします。これら 2 つのオプションを組み合わせて -iL
のように記述することもできます。 または -Li
-L -i
の代わりに .
コマンドを実行すると、HTTP 3XX リダイレクトと、リダイレクト後のページ HTTP 200 OK 応答が表示されます。
-o
を使用する場合 /-O
-i
と組み合わせたオプション 、応答ヘッダーと本文が 1 つのファイルに保存されます。
リクエスト ヘッダーと接続の詳細を表示する
前のセクションでは、cURL を使用して HTTP 応答ヘッダーを表示する方法を見てきました。ただし、送信されたリクエスト ヘッダーや接続プロセスなど、リクエストの詳細を表示したい場合もあります。 cURL は -v
を提供します この目的のためのフラグ (「冗長モード」と呼ばれます) であり、次のように使用できます:
curl -v https://www.booleanworld.com/
出力には要求データが含まれます (>
でマークされています) )、応答ヘッダー (<
でマーク ) および使用された IP や SSL ハンドシェイク プロセス (*
でマークされている) など、リクエストに関するその他の詳細 )。応答本文は、この情報の下にもあります。 (ただし、これは下のスクリーンショットには表示されません)。
ほとんどの場合、応答本文には関心がありません。 /dev/null
である null デバイスに出力を「保存」することで、単純に非表示にすることができます。 Linux と MacOS および NUL
で Windows の場合:
curl -vo /dev/null https://www.booleanworld.com/ # Linux/MacOS curl -vo NUL https://www.booleanworld.com/ # Windows
エラーのサイレンシング
前に、出力をファイルに保存するときに cURL がプログレス バーを表示することを見てきました。残念ながら、進行状況バーはすべての状況で役立つとは限りません。例として、-vo /dev/null
で出力を非表示にすると、 、まったく役に立たない進行状況バーが表示されます。
-s
を使用して、これらの余分な出力をすべて非表示にすることができます ヘッダ。前の例を続けてプログレス バーを非表示にすると、コマンドは次のようになります。
curl -svo /dev/null https://www.booleanworld.com/ # Linux/MacOS curl -svo NUL https://www.booleanworld.com/ # Windows
-s
ただし、このオプションはエラー メッセージを隠してしまうため、少し攻撃的です。あなたのユースケースでは、進行状況バーを非表示にしたいがエラーを表示したい場合は、 -S
を組み合わせることができます オプション。
したがって、cURL 出力をファイルに保存しようとしているが、単にプログレス バーを非表示にしたい場合は、次を使用できます。
curl -sSvo file.html https://www.booleanworld.com/
cURL を使用した HTTP リクエスト ヘッダーの設定
API をテストする場合、HTTP 要求にカスタム ヘッダーを設定する必要がある場合があります。 cURL には -H
があります この目的に使用できるオプション。カスタムヘッダー X-My-Custom-Header
を送信する場合 123
の値で https://httpbin.org/get
へ 、実行する必要があります:
curl -H 'X-My-Custom-Header: 123' https://httpbin.org/get
(httpbin.org は、送信した HTTP 要求の詳細を表示できる非常に便利な Web サイトです。)
URL によって返されたデータは、このヘッダーが実際に設定されたことを示しています:
「User-Agent」ヘッダーや「Host」ヘッダーなど、cURL によって送信されるデフォルトのヘッダーを上書きすることもできます。 HTTP クライアント(この場合は cURL)は「User-Agent」ヘッダーを送信して、使用されているクライアントのタイプとバージョンをサーバーに伝えます。また、クライアントは「Host」ヘッダーを使用して、サービスを提供するサイトについてサーバーに伝えます。 Web サーバーは単一の IP アドレスで複数の Web サイトをホストできるため、このヘッダーが必要です。
また、複数のヘッダーを設定したい場合は、 -H
を繰り返すだけです
curl -H 'User-Agent: Mozilla/5.0' -H 'Host: www.google.com' ...
ただし、cURL には、頻繁に使用されるフラグの特定のショートカットがあります。 -A
で「User-Agent」ヘッダーを設定できます オプション:
curl -A Mozilla/5.0 https://httpbin.org/get
「Referer」ヘッダーは、以前のサイトから参照された場所をサーバーに伝えるために使用されます。通常、ページにリンクされた Javascript または画像をリクエストするとき、またはリダイレクトに従うときに、ブラウザによって送信されます。 「Referer」ヘッダーを設定する場合は、-e
を使用できます フラグ:
curl -e https://www.google.com/ https://httpbin.org/get
それ以外の場合、一連のリダイレクトに従っている場合は、単純に -e ';auto'
を使用できます cURL は、リダイレクトの設定を自動的に処理します。
cURL を使用した POST リクエストの作成
デフォルトでは、cURL は GET リクエストを送信しますが、これを使用して -d
を使用して POST リクエストを送信することもできます または --data
オプション。すべてのフィールドは key=value
として指定する必要があります アンパサンドで区切られたペア (&
) キャラクター。例として、いくつかのパラメーターを使用して httpbin.org に POST 要求を行うことができます:
curl --data "firstname=boolean&lastname=world" https://httpbin.org/post
出力から、2 つのパラメーターをポストしたことが簡単にわかります (これは「form」キーの下に表示されます)。
@
などの特殊文字 、 %
、=
または値内のスペースは、手動で URL エンコードする必要があります。したがって、値が「[email protected]」のパラメータ「email」を送信する場合は、次を使用します。
curl --data "email=test%40example.com" https://httpbin.org/post
または、--data-urlencode
を使用することもできます これを処理します。 2 つのパラメーターを送信する場合は、email
と name
、これがオプションの使用方法です:
curl --data-urlencode "[email protected]" --data-urlencode "name=Boolean World" https://httpbin.org/post
--data
の場合 パラメータが大きすぎて端末に入力できない場合は、ファイルに保存してから @
を使用して送信できます 、そのように:
curl --data @params.txt example.com
これまで、cURL を使用して POST 要求を行う方法を見てきました。 POST リクエストを使用してファイルをアップロードする場合は、-F
を使用できます (「フォーム」) オプション。ここでは、ファイル test.c
を送信します。 、パラメータ名 file
の下 :
curl -F [email protected] https://httpbin.org/post
これはファイルの内容を示しており、ファイルが正常に送信されたことを示しています:
cURL を使用した JSON データの送信
前のセクションでは、cURL を使用して POST リクエストを送信する方法を見てきました。 --data
を使用して JSON データを送信することもできます オプション。ただし、ほとんどのサーバーは、以前に説明したものと同様に、キーと値のペアを含む POST 要求を受信することを期待しています。そのため、「Content-Type:application/json」という追加のヘッダーを追加して、サーバーが JSON データを処理していることを認識して適切に処理できるようにする必要があります。また、JSON を送信するときにデータを URL エンコードする必要はありません。
したがって、次の JSON データがあり、https://httpbin.org/post に POST リクエストを送信したい場合:
{ "email": "[email protected]", "name": ["Boolean", "World"] }
次に、次の方法でデータを送信できます:
curl --data '{"email":"[email protected]", "name": ["Boolean", "World"]}' -H 'Content-Type: application/json' https://httpbin.org/post
この場合、データは json
の下に表示されます。 httpbin.org 出力の値:
JSON ファイルを保存して、以前と同じ方法で送信することもできます。
curl --data @data.json https://httpbin.org/post
リクエスト方法の変更
前に、cURL を使用して POST リクエストを送信する方法を見てきました。場合によっては、データをまったく指定せずに POST リクエストを送信する必要がある場合があります。その場合、 -X
を使用してリクエスト メソッドを POST に変更するだけです。 オプション、次のように:
curl -X POST https://httpbin.org/post
リクエスト メソッドを、PUT、DELETE、PATCH など、他のものに変更することもできます。注目すべき例外の 1 つは HEAD メソッドです。これは -X
では設定できません。 オプション。 HEAD メソッドは、ドキュメントがサーバー上に存在するかどうかを確認するために使用されますが、ドキュメントはダウンロードされません。 HEAD メソッドを使用するには、-I
を使用します オプション:
curl -I https://www.booleanworld.com/
HEAD リクエストを行うと、cURL はデフォルトですべてのリクエスト ヘッダーを表示します。サーバーは HEAD リクエストを受信してもコンテンツを送信しないため、ヘッダーの後には何もありません:
cURL を使用してブラウザ リクエストを複製する
ブラウザから cURL を介して行われたリクエストを複製したい場合は、Chrome、Firefox、および Safari 開発者ツールを使用して cURL コマンドを取得できます。
関連する手順は、すべてのプラットフォームとブラウザで同じです:
- Firefox/Chrome で開発者ツールを開く (通常、Windows/Linux では F12、Mac では Cmd+Shift+I)
- ネットワーク タブに移動
- リストからリクエストを選択し、右クリックして [cURL としてコピー] を選択します
コピーされたコマンドには、まったく同じ要求を複製するために必要なすべてのヘッダー、要求メソッド、Cookie などが含まれています。コマンドを端末に貼り付けて実行できます。
HTTP エラーで cURL を失敗させる
興味深いことに、cURL は成功した HTTP 要求 (2xx) と失敗した HTTP 要求 (4xx/5xx) を区別しません。そのため、サイトへの接続に問題がない限り、常に 0 の終了ステータスを返します。これにより、ファイルが正常にダウンロードされたかどうかを確認する方法がないため、シェル スクリプトの作成が困難になります。
これは、手動でリクエストを行うことで確認できます:
curl https://www.booleanworld.com/404 -sSo file.txt
curl がエラーを出力せず、終了ステータスもゼロであることがわかります:
これらの HTTP エラーも考慮したい場合は、 -f
を使用できます オプション、次のように:
curl https://www.booleanworld.com/404 -fsSo file.txt
ここで、cURL がエラーを出力し、ステータス コードを 22 に設定して、エラーが発生したことを通知することがわかります。
cURL による認証済みリクエストの作成
一部の Web ページと API では、ユーザー名とパスワードによる認証が必要です。これには 2 つの方法があります。 -u
でユーザー名とパスワードを指定できます オプション:
curl -u boolean:world https://example.com/
または、単に <username>:<password>@<host>
を使用して URL 自体に追加することもできます 構文:
curl https://boolean:[email protected]/
これらの方法の両方で、curl はサーバーで「基本」認証を行います。
cURL によるプロトコル サポートのテスト
cURL は幅広いプロトコルをサポートしているため、プロトコルのサポートをテストするために使用することもできます。サイトが特定のバージョンの SSL をサポートしているかどうかを確認したい場合は、--sslv<version>
を使用できます。 または --tlsv<version>
フラグ。たとえば、サイトが TLS v1.2 をサポートしているかどうかを確認する場合は、次を使用できます。
curl -v --tlsv1.2 https://www.booleanworld.com/
リクエストは正常に行われます。これは、サイトが TLSv1.2 をサポートしていることを意味します。次に、サイトが SSL v3 をサポートしているかどうかを確認してみましょう:
curl -v --sslv3 https://www.booleanworld.com/
このコマンドは handshake_failed
をスローします サーバーがこのバージョンの SSL をサポートしていないため、エラーが発生しました。
システムとライブラリのバージョン/構成によっては、これらのバージョン オプションの一部が機能しない場合があることに注意してください。上記の出力は、Ubuntu 16.04 の cURL から取得したものです。ただし、MacOS 10.14 の cURL でこれを試みると、エラーが発生します:
フラグ --http1.0
を使用して、同じ方法で HTTP プロトコルのバージョンをテストすることもできます。 、 --http1.1
または --http2
.
Host ヘッダーと cURL の --resolve
の設定 オプション
以前は、「ホスト」ヘッダーに応じて、Web サーバーがさまざまな Web サイトを訪問者に提供することを選択する方法について説明しました。これは、「ホスト」ヘッダーを変更することにより、Web サイトに仮想ホスティングが正しく構成されているかどうかを確認するのに非常に役立ちます。例として、192.168.0.1
にローカル サーバーがあるとします。 example1.com
という 2 つの Web サイトが構成されている と example2.com
.これで、Host ヘッダーを設定し、正しいコンテンツが提供されているかどうかを確認することで、すべてが正しく構成されているかどうかをテストできます:
curl -H 'Host: example1.com' https://192.168.0.1/ curl -H 'Host: example1.com' https://192.168.0.1/
残念ながら、これは HTTPS を使用する Web サイトではうまく機能しません。 1 つの Web サイトが複数の Web サイトを提供するように構成でき、各 Web サイトは独自の SSL/TLS 証明書を使用します。 SSL/TLS は HTTP よりも低いレベルで行われるため、cURL などのクライアントは、SSL/TLS レベルでアクセスしようとしている Web サイトをサーバーに伝え、サーバーが適切な証明書を選択できるようにする必要があります。デフォルトでは、cURL は常にこれをサーバーに伝えます。
ただし、上記の例のように特定の IP にリクエストを送信する場合、サーバーが間違った証明書を選択する可能性があり、SSL/TLS 検証が失敗する原因となります。 Host
ヘッダーは HTTP レベルでのみ機能し、SSL/TLS レベルでは機能しません。
上記の問題を回避するには、 --resolve
を使用できます 国旗。解決フラグは、選択したポートと IP にリクエストを送信しますが、Web サイト名は SSL/TLS と HTTP の両方のレベルで正しく送信します。
前の例を考えてみましょう。 HTTPS を使用していて、それをローカル サーバー 192.168.0.1
に送信したい場合 、使用できます:
curl https://example1.com/ --resolve example1.com:192.168.0.1:443
HTTP にも適しています。 HTTP サーバーがポート 8080 でサービスを提供している場合、 --resolve
のいずれかを使用できるとします。 次のように、手動でホスト ヘッダーとポートにフラグを立てるか、設定します。
curl https://192.168.0.1:8080/ -H 'Host: example1.com:8080' curl https://example.com/ --resolve example1.com:192.168.0.1:8080
上記の 2 つのコマンドは同等です。
ドメインを IPv4 および IPv6 アドレスに解決する
IPv4 または IPv6 の両方でサイトに到達できるかどうかを確認したい場合があります。 -4
を使用して、cURL を IPv4 または IPv6 バージョンのサイトに強制的に接続できます。 または -6
次の場合にのみ、IPv4 および IPv6 経由で Web サイトにアクセスできることに注意してください。
- ウェブサイトを IPv4 および IPv6 アドレスにリンクするための適切な DNS レコードがあります。
- システムに IPv4 および IPv6 接続がある
たとえば、IPv6 経由でウェブサイト icanhazip.com にアクセスできるかどうかを確認する場合は、次を使用できます。
curl -6 https://icanhazip.com/
HTTPS 経由でサイトに到達できる場合は、出力で独自の IPv6 アドレスを取得する必要があります。この Web サイトは、それに接続するすべてのクライアントのパブリック IP アドレスを返します。したがって、使用されるプロトコルに応じて、IPv4 または IPv6 アドレスが表示されます。
-v
も使用できます -4
と一緒のオプション そして -6
詳細を確認してください。
cURL の証明書チェックを無効にする
デフォルトでは、cURL は HTTPS 経由で接続するときに証明書をチェックします。ただし、自己署名証明書を使用してサイトにリクエストを送信しようとしている場合や、証明書の構成が正しくないサイトをテストする必要がある場合は、証明書のチェックを無効にすることが役立つことがよくあります。
証明書チェックを無効にするには、-k
を使用します 証明書。期限切れの SSL 証明書を使用する Web サイトである expired.badssl.com にリクエストを送信して、これをテストします。
curl -k https://expired.badssl.com/
-k
で オプションを指定すると、証明書のチェックは無視されます。そのため、cURL はページをダウンロードし、リクエストの本文を正常に表示します。一方、-k
を使用しなかった場合は、 オプションを選択すると、次のようなエラーが表示されます:
「cURL タイミング内訳」による Web サイトの問題のトラブルシューティング
Web サイトが非常に遅い状況に遭遇する場合があり、その問題をより深く掘り下げたいと思うでしょう。 -w
を使用して、DNS 解決にかかった時間、接続の確立など、cURL にリクエストの詳細を表示させることができます。 オプション。これは、cURL の「タイミングの内訳」と呼ばれることがよくあります。
例として、https://www.booleanworld.com/
に接続するためのこれらの詳細を表示する場合は、 、実行:
curl https://www.booleanworld.com/ -sSo /dev/null -w 'namelookup:t%{time_namelookup}nconnect:t%{time_connect}nappconnect:t%{time_appconnect}npretransfer:t%{time_pretransfer}nredirect:t%{time_redirect}nstarttransfer:t%{time_starttransfer}ntotal:tt%{time_total}n'
(これを Windows システムから実行している場合は、/dev/null
を変更してください NUL
へ ).
次のような出力が得られます:
これらの各値は秒単位であり、各値が表すものは次のとおりです:
- namelookup — DNS 解決に必要な時間
- つながる — TCP 接続の確立に必要な時間
- appconnect — これは、SSL/TLS など、TCP とアプリケーション層の間の任意の層の接続を確立するのにかかる時間です。この場合、アプリケーション層は HTTP です。また、そのような中間層がない場合 (直接 HTTP リクエストがある場合など)、この時間は常に 0 になります。
- 事前転送 — これは、ファイル転送の開始から開始直前までの時間です。
- リダイレクト — これは、リダイレクトの処理にかかった合計時間です。
- 転送開始 — 開始から最初のバイトが転送されるまでにかかった時間
- 合計 — cURL がプロセス全体を完了するのにかかった合計時間。
たとえば、Web サイトへの接続の遅延に直面していて、「namelookup」の値が高すぎることに気付いたとします。これは ISP の DNS サーバーに問題があることを示しているため、DNS ルックアップが非常に遅い理由を調べ始め、必要に応じて別の DNS サーバーに切り替えることができます。
cURL 構成ファイル
すべての cURL リクエストで同じオプションを使用したい場合があります。これらのオプションを手動で渡すことは現実的な解決策ではないため、cURL を使用すると構成ファイルでオプションを指定できます。
デフォルトの設定ファイルは ~/.curlrc
にあります Linux/MacOS および %appdata%_curlrc
で Windowsで。このファイル内で、次のような必要なオプションを指定できます。
# Always use IPv4 -4 # Always show verbose output -v # When following a redirect, automatically set the previous URL as referer. referer = ";auto" # Wait 60 seconds before timing out. connect-timeout = 60
上記のファイルを作成したら、 curl example.com
でリクエストしてみてください .これらのオプションが有効になっていることがわかります。
デフォルトの構成ファイルの代わりにカスタム構成ファイルを使用する場合は、-K
を使用できます。 curl を設定ファイルに向けるオプション。例として、config.txt
という構成ファイルがあるとします。 、次に使用できます:
curl -K config.txt example.com
結論
この記事では、cURL コマンドの最も一般的な使用法について説明しました。もちろん、この記事は表面をなぞっただけで、cURL は他にもさまざまなことができます。 man curl
と入力できます 端末で使用するか、このページにアクセスして、すべてのオプションをリストした man ページを参照してください。