こんにちは。よっしーです(^^)
今日は、curlコマンドについてご紹介します。
背景
先日、PHPのslimフレームワークを利用したRESTful API用の開発環境を構築していたのですが、ブラウザでアクセスして確認するのにも限界があるなと思い、コマンドで動作確認できるようにcurlというコマンドを使用して確認する方法をご紹介します。
準備
まず、PHPのslimフレームワークを利用したRESTful API用の開発環境を用意します。
下記のコマンドを実行します。
git clone git@github.com:Gate-Yossi/Ran.git
cd Ran
make setup
make up
ブラウザで「http://localhost」にアクセスして、下図の画面のようになれば成功です。
curlとは
Curl(カール)は、コマンドラインベースのツールで、主にURLを使用してデータを転送するために使用されるプログラムです。Curlは、さまざまなプロトコル(HTTP、HTTPS、FTP、SMTP、POP3など)をサポートしており、リクエストを送信し、レスポンスを受け取ることができます。
Curlを使用すると、コマンドラインから以下のようなことができます:
- ファイルのダウンロード:指定したURLからファイルをダウンロードすることができます。
curl -O <URL>
のように使用します。 - データの送信:HTTPを介してデータを送信することができます。
curl -X POST -d "data" <URL>
のように使用します。 - ヘッダーのカスタマイズ:リクエストヘッダーやカスタムヘッダーを追加することができます。
curl -H "Header: value" <URL>
のように使用します。 - 認証の追加:ベーシック認証やトークンベアラー認証などの認証情報を追加することができます。
curl -u username:password <URL>
のように使用します。
これらは一部の一般的な使用例ですが、Curlは非常に柔軟なツールであり、さまざまなオプションやフラグを使用してさまざまな操作を行うことができます。
以下にいくつかの便利な使用例を示します:
- HTTPヘッダーの表示: ウェブサーバーから返されるHTTPヘッダーを表示するには、
-I
オプションを使用します。例えば、curl -I example.com
と入力すると、HTTPヘッダーの情報が表示されます。 - ダウンロード速度の表示: ファイルをダウンロードする際に、進捗状況とダウンロード速度を表示するには、
-#
オプションを使用します。例えば、curl -# -O example.com/file.zip
と入力すると、ダウンロードの進行状況が表示されます。 - リダイレクトの自動処理: リダイレクトを自動的に処理して最終的な結果を取得するには、
-L
オプションを使用します。例えば、curl -L example.com
と入力すると、最終的なリダイレクト先のコンテンツが表示されます。 - フォームデータの送信: HTTP POSTリクエストでフォームデータを送信するには、
-d
オプションを使用します。例えば、curl -X POST -d "name=John&age=30" example.com/form
と入力すると、指定したデータを含むPOSTリクエストが送信されます。 - レスポンスをファイルに保存: レスポンスをファイルに保存するには、
-o
オプションを使用します。例えば、curl -o output.txt example.com/api
と入力すると、レスポンスがoutput.txtという名前のファイルに保存されます。 - ヘッダーのカスタマイズ: リクエストヘッダーやカスタムヘッダーを追加するには、
-H
オプションを使用します。例えば、curl -H "Content-Type: application/json" example.com/api
と入力すると、Content-Typeヘッダーが追加されたリクエストが送信されます。
これらは一部の便利な使用例ですが、Curlは非常に多機能なツールであり、さまざまなオプションやフラグを使用してさまざまな操作を行うことができます。Curlの公式ドキュメントやオンラインリソースを参照すると、さらに詳細な情報を入手できます。
実践
下記のコマンドを実行します。ブラウザでアクセスしていたURLをcurlで実行してみます。
curl http://localhost
下記の結果になると思います。
% curl http://localhost
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
ブラウザで表示されていた文言とは違っていることが確認できます。
301 Moved Permanently
「301 Moved Permanently」は、HTTPのステータスコードの一つで、リクエストされたリソースが恒久的に移動したことを示すものです。具体的には、クライアントがリクエストしたURLが新しい場所に移動されていることを意味します。
通常、WebサイトやWebページが新しい場所に移動した場合に、このステータスコードが使用されます。ブラウザやクライアントは、レスポンスのヘッダーに含まれる新しいURLにアクセスすることで、リソースを取得することが期待されます。
以下は、301リダイレクトの処理の一般的なフローです:
- クライアント(ウェブブラウザなど)は、特定のURLにリクエストを送信します。
- サーバーは、301ステータスコードとともにレスポンスを返します。レスポンスヘッダーには、新しい場所(新しいURL)が含まれます。
- クライアントは、新しいURLに対して再度リクエストを送信します。
- サーバーは、新しいURLのリソースを提供します。
301リダイレクトは、検索エンジン最適化(SEO)やWebサイトのリソースの再構築など、ウェブサイトの構造の変更時に使用されることがあります。また、古いURLがブックマークされていたり、他のWebサイトからのリンクが存在する場合でも、301リダイレクトを使用して新しい場所に自動的に転送することができます。
注意点としては、301リダイレクトが設定された場合、クライアントや検索エンジンは新しいURLを参照するように更新する必要があります。また、301リダイレクトはキャッシュされることがあるため、変更後のリダイレクト先に対して再度アクセスするまで、クライアントは古いキャッシュを使用することがあります。
「301 Moved Permanently」ステータスコードは、HTTPの一部であり、Webサーバーから返される他のステータスコード(200 OK、404 Not Foundなど)と同様に、クライアントとサーバー間の通信やリソースの移動に関連して使用されます。
Lオプション
レスポンスヘッダーのURLにアクセスしてもらうようにLオプションを付けて、下記のコマンドを実行します。
curl -L http://localhost
下記のようになるかと思います。
% curl -L http://localhost
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
ブラウザのときと同様にオレオレ証明書のためにアクセスができませんでした。
kオプション
これを回避するために、kオプションを追加して実行します。コマンドは下記のようになります。
curl -Lk http://localhost
下記の結果になれば、ブラウザと同じ結果を得られました。
% curl -Lk http://localhost
Hello world!
cacertオプション
下記のようにオレオレ証明書を指定することで、同様の結果を得ることもできます。
% curl -L http://localhost --cacert ./app/https-portal/ssl_certs/localhost/local/signed.crt
Hello world!%
curlを使用するメリット
Curlコマンドを使用するメリットは以下の通りです:
- コマンドラインから直接使用できる: Curlはコマンドラインベースのツールであり、ターミナルやコマンドプロンプトから直接呼び出すことができます。これにより、GUIベースのアプリケーションやブラウザの依存性を排除し、シェルスクリプトやバッチファイルなどの自動化タスクに組み込むことができます。
- 多くのプロトコルをサポートしている: CurlはHTTP、HTTPSをはじめとするさまざまなプロトコルをサポートしています。FTPやSMTPなど、他のプロトコルでも使用することができます。それぞれのプロトコルに対応したオプションや機能を提供しており、柔軟なデータ転送が可能です。
- レスポンスの解析とテスト: Curlはリクエストを送信し、サーバーからのレスポンスを取得することができます。これにより、APIのテストやレスポンスの解析が容易になります。HTTPヘッダーやステータスコード、レスポンスボディの内容などを確認できます。
- 様々なオプションと設定が可能: Curlは豊富なオプションを提供しており、リクエストやレスポンスのカスタマイズが可能です。ヘッダーの追加、クッキーの処理、ユーザーエージェントの設定など、さまざまな機能を活用することができます。
- ダウンロードやアップロードのサポート: Curlはファイルのダウンロードやアップロードにも使用できます。大きなファイルのダウンロードやアップロード、FTPサーバーとのファイルの送受信などが可能です。
- クロスプラットフォームな利用: Curlは多くのオペレーティングシステムで利用可能であり、クロスプラットフォームで動作します。Windows、macOS、Linuxなど、さまざまな環境で使用することができます。
Curlは柔軟性が高く、多くの機能を持つツールであり、コマンドラインから直接使用することで、データ転送やAPIテスト、自動化タスクなどで幅広く活用することができます。
おわりに
今日は、curlコマンドについてご紹介しました。
今までブラウザで確認していましたが、これからはcurlも利用して動作確認をしていきたいと思います。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント