はじめに
Linux の URL を使ったデータ転送の実験へようこそ。この実験では、Linux システムで URL を使ってデータを転送する方法を学びます。これは、システム管理者、開発者、セキュリティ専門家にとって基本的なスキルです。
学ぶ主要なツールは curl です。これは、URL 構文を使ってデータを転送するための強力なコマンドラインユーティリティです。ウェブサイトからデータを取得する方法、コンテンツをファイルに保存する方法、さまざまな HTTP メソッドを使用する方法、およびさまざまなオプションでリクエストをカスタマイズする方法を学びます。
この実験の終了時には、実際のシナリオで一般的に使用される重要なデータ転送技術の実践的な経験を積むことができます。
curl の基本を理解する
curl は、URL 構文を使ってデータを転送するためのコマンドラインツールです。HTTP、HTTPS、FTP など、多数のプロトコルをサポートしています。このステップでは、ウェブコンテンツを取得するための curl の基本的な使い方を学びます。
まずはターミナルを開きましょう。ターミナルはすでに /home/labex/project ディレクトリにあるはずです。もしそうでない場合は、以下のコマンドを使ってこのディレクトリに移動できます。
cd ~/project
最初の curl コマンド
まずは curl を使ってウェブサイトからコンテンツを取得してみましょう。以下のコマンドを入力します。
curl http://example.com
このコマンドを実行すると、example.com の HTML コンテンツがターミナルに表示されるはずです。この出力には HTML タグとウェブページのすべてのコンテンツが含まれています。出力は以下のようになります。
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents...</p>
...
</div>
</body>
</html>
これは curl の最も基本的な使い方を示しています。URL のコンテンツを取得し、それを直接ターミナルに表示することができます。
出力を理解する
表示される出力は、サーバーからの生の HTML レスポンスです。ブラウザを使ってウェブサイトを訪問すると、ブラウザがこの HTML を解釈し、整形されたウェブページとしてレンダリングします。しかし、curl は単に生のコンテンツを表示するだけです。
別のコンテンツを見るために、もう 1 つの例を試してみましょう。以下のコマンドを実行します。
curl https://httpbin.org/json
今度は JSON レスポンスが表示されるはずです。出力は以下のようになります。
{
"slideshow": {
"author": "Yours Truly",
"date": "date of publication",
"slides": [
{
"title": "Wake up to WonderWidgets!",
"type": "all"
},
{
"items": [
"Why <em>WonderWidgets</em> are great",
"Who <em>buys</em> WonderWidgets"
],
"title": "Overview",
"type": "all"
}
],
"title": "Sample Slide Show"
}
}
見ての通り、curl はサーバーが提供する内容に応じて、さまざまなタイプのコンテンツを取得することができます。
出力をファイルに保存する
多くの場合、取得したコンテンツをターミナルで表示するだけでなく、保存したいことがあります。このステップでは、curl の出力をファイルに保存する方法を学びます。
出力のリダイレクトを使用した保存
curl コマンドの出力を保存する最も簡単な方法は、> 演算子を使ってリダイレクトすることです。以下のコマンドを実行します。
curl http://example.com > example.html
このコマンドは、example.com からコンテンツを取得し、現在のディレクトリに example.html という名前のファイルに保存します。ファイルが作成されたことを確認するには、以下のコマンドを実行します。
ls -l example.html
ファイルのサイズやその他の詳細が表示されるはずです。
ファイルの内容を確認するには、cat コマンドを使用できます。
cat example.html
以前にターミナルに表示されたのと同じ HTML コンテンツが表示されるはずです。
curl の -o オプションを使用する
curl は、取得したコンテンツをファイルに保存するための特定のオプション -o(または --output)を提供しています。これは、出力のリダイレクトに問題が生じる場合に特に便利です。試してみましょう。
curl -o httpbin_data.json https://httpbin.org/json
このコマンドは、httpbin.org からの JSON データを httpbin_data.json という名前のファイルに保存します。ファイルが作成されたことを以下のコマンドで確認します。
ls -l httpbin_data.json
そして、以下のコマンドで内容を確認します。
cat httpbin_data.json
データディレクトリの作成
ファイルを整理することは良い習慣です。専用のデータディレクトリ(まだ存在しない場合)を作成し、そこにいくつかのコンテンツを保存しましょう。
mkdir -p data
curl -o data/google_data.txt http://www.google.com
mkdir -p コマンドは、data ディレクトリがまだ存在しない場合に作成します。-p フラグは、ディレクトリがすでに存在する場合にエラーを報告しないようにします。
ここで、データディレクトリにファイルが作成されたことを確認します。
ls -l data/google_data.txt
ファイルの詳細が表示されるはずです。
curl の高度なオプション
curl は、リクエストをカスタマイズするための多くのオプションを提供しています。このステップでは、最も有用なオプションのいくつかについて学びます。
詳細モード
-v(または --verbose)オプションは、curl にリクエストとレスポンスに関する詳細情報を表示させます。これはデバッグに特に有用です。以下のコマンドを実行します。
curl -v http://example.com
以下のような多くの情報が表示されるはずです。
- curl が送信したリクエストヘッダー
- 接続の詳細
- サーバーからのレスポンスヘッダー
- レスポンスの実際の内容
出力は以下のようになります(一部の詳細は異なる場合があります)。
* Trying 93.184.216.34:80...
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 578793
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 26 Dec 2023 13:45:32 GMT
< Etag: "3147526947+ident"
< Expires: Tue, 02 Jan 2024 13:45:32 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (dcb/7F83)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
<
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
* で始まる行は、curl 自身からの情報メッセージです。
> で始まる行は、リクエストヘッダーです。
< で始まる行は、レスポンスヘッダーです。
実際の内容はレスポンスヘッダーの後に続きます。
カスタムヘッダー
場合によっては、リクエストに特定のヘッダーを送信する必要があります。この場合は -H(または --header)オプションを使用できます。カスタムの User-Agent を設定してみましょう。
curl -H "User-Agent: MyCustomClient/1.0" https://httpbin.org/user-agent
このコマンドは、カスタムの User-Agent ヘッダーを含むリクエストを httpbin.org に送信します。レスポンスでは、カスタムの User-Agent が受信されたことが確認されるはずです。
{
"user-agent": "MyCustomClient/1.0"
}
リダイレクトの追跡
デフォルトでは、curl は HTTP リダイレクトを追跡しません。-L(または --location)オプションを使用すると、リダイレクトを追跡するようになります。試してみましょう。
curl -L http://github.com
-L オプションを使用しない場合、リダイレクトレスポンスが返されるだけです。-L を使用すると、curl はリダイレクトを追跡し、最終的な宛先のコンテンツを表示します。
これらのオプションを練習するために、データディレクトリにファイルを作成しましょう。
curl -v -L -o data/redirect_example.txt http://github.com
このコマンドは以下のことを行います。
- 詳細モード(
-v)を使用する - リダイレクトを追跡する(
-L) - 出力を
data/redirect_example.txtに保存する - github.com からコンテンツをリクエストする
ファイルが作成されたことを確認します。
ls -l data/redirect_example.txt
ファイルの詳細が表示されるはずです。
HTTP メソッドとデータ送信
curl は、デフォルトの GET メソッド以外の様々な HTTP メソッドをサポートしています。このステップでは、異なる HTTP メソッドを使用し、リクエストとともにデータを送信する方法を学びます。
POST メソッドの使用
POST メソッドは、サーバーにデータを送信するために一般的に使用されます。-X オプションを使用して HTTP メソッドを指定し、-d オプションを使用してデータを提供できます。試してみましょう。
curl -X POST -d "name=John&age=25" https://httpbin.org/post
このコマンドは、フォームデータを含む POST リクエストを httpbin.org に送信します。レスポンスには、送信したデータがエコーバックされるはずです。
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "25",
"name": "John"
},
"headers": {
"Accept": "*/*",
"Content-Length": "16",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": null,
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
JSON データの送信
JSON データを送信するには、Content-Type ヘッダーを指定する必要があります。以下のコマンドを実行します。
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":25}' https://httpbin.org/post
レスポンスには、送信した JSON データが含まれるはずです。
{
"args": {},
"data": "{\"name\":\"John\",\"age\":25}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "24",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": {
"age": 25,
"name": "John"
},
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
その他の HTTP メソッドの使用
curl はすべての標準 HTTP メソッドをサポートしています。PUT リクエストを試してみましょう。
curl -X PUT -d "data=example" https://httpbin.org/put
DELETE リクエストも試してみましょう。
curl -X DELETE https://httpbin.org/delete
これらの各コマンドは、リクエストの詳細を示すレスポンスを返します。
POST リクエストの出力をファイルに保存しましょう。
curl -X POST -d "name=John&age=25" -o data/post_response.json https://httpbin.org/post
ファイルが作成されたことを確認します。
ls -l data/post_response.json
そして、その内容を確認します。
cat data/post_response.json
先ほど表示されたのと同様の、httpbin.org からの JSON レスポンスが表示されるはずです。
ファイルのダウンロードと進捗の監視
curl はインターネットからファイルをダウンロードするのに優れています。このステップでは、ファイルをダウンロードする方法とダウンロードの進捗状況を監視する方法を学びます。
基本的なファイルダウンロード
ファイルをダウンロードするには、先ほど学んだ -o オプションを使用できます。サンプル画像をダウンロードしてみましょう。
curl -o data/sample.jpg https://httpbin.org/image/jpeg
このコマンドは、httpbin.org から JPEG 画像をダウンロードし、data ディレクトリに sample.jpg として保存します。
ファイルがダウンロードされたことを確認します。
ls -l data/sample.jpg
進捗バー付きでのダウンロード
大きなファイルをダウンロードする場合、進捗状況を確認すると便利です。-# オプションを使用すると、進捗バーを表示できます。
curl -## -o data/sample_with_progress.jpg https://httpbin.org/image/jpeg
以下のような進捗バーが表示されるはずです。
######################################################################### 100.0%
自動名前付けでの出力ファイルオプションの使用
リモートファイルと同じファイル名を使用したい場合は、-O(大文字の O)オプションを使用できます。
cd data
curl -O https://httpbin.org/image/jpeg
cd ..
これにより、ファイルがダウンロードされ、data ディレクトリに jpeg(URL の最後の部分)として保存されます。
ファイルがダウンロードされたことを確認します。
ls -l data/jpeg
中断されたダウンロードの再開
ダウンロードが中断された場合、-C - オプションを使用して再開できます。
curl -C - -o data/resume_example.jpg https://httpbin.org/image/jpeg
これにより、curl にダウンロードを再開する位置を自動的に判断させます。
ダウンロード速度の制限
--limit-rate オプションを使用すると、ダウンロード速度を制限できます。
curl --limit-rate 100K -o data/rate_limited.jpg https://httpbin.org/image/jpeg
これにより、ダウンロード速度が 100 KB/s に制限されます。
複数ファイルのダウンロード
1 つのコマンドで複数のファイルをダウンロードできます。
curl -o data/image1.jpg https://httpbin.org/image/jpeg -o data/image2.png https://httpbin.org/image/png
これにより、JPEG 画像と PNG 画像がダウンロードされ、それぞれ image1.jpg と image2.png として保存されます。
両方のファイルがダウンロードされたことを確認します。
ls -l data/image1.jpg data/image2.png
まとめ
この実験では、URL を使ってデータを転送する強力なコマンドラインツールである curl の使い方を学びました。以下の内容について実践的な経験を積んだことになります。
- Web コンテンツを取得するための curl の基本的な使い方
- リダイレクトと
-oオプションを使って curl の出力をファイルに保存する方法 - 詳細モード (
-v)、カスタムヘッダー (-H)、リダイレクトの追跡 (-L) などの高度な curl オプションの使い方 - 異なる HTTP メソッド (GET、POST、PUT、DELETE) を使った操作とデータの送信方法
- ファイルのダウンロードとダウンロード進捗の監視方法
これらのスキルは、システム管理、Web 開発、API テスト、自動化スクリプトなどの多くのタスクにおいて不可欠です。curl コマンドは様々な技術分野で広く使われており、ほぼすべての Linux ディストリビューション、macOS、さらには Windows でも利用できます。
Linux とネットワーキングの学習を続ける際には、この実験でカバーした以上に curl にはたくさんのオプションと機能があることを忘れないでください。詳細な情報が必要な場合は、いつでも curl マニュアル (man curl) を参照することができます。



