Linux の URL データ転送

LinuxBeginner
オンラインで実践に進む

はじめに

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

このコマンドは以下のことを行います。

  1. 詳細モード(-v)を使用する
  2. リダイレクトを追跡する(-L
  3. 出力を data/redirect_example.txt に保存する
  4. 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.jpgimage2.png として保存されます。

両方のファイルがダウンロードされたことを確認します。

ls -l data/image1.jpg data/image2.png

まとめ

この実験では、URL を使ってデータを転送する強力なコマンドラインツールである curl の使い方を学びました。以下の内容について実践的な経験を積んだことになります。

  1. Web コンテンツを取得するための curl の基本的な使い方
  2. リダイレクトと -o オプションを使って curl の出力をファイルに保存する方法
  3. 詳細モード (-v)、カスタムヘッダー (-H)、リダイレクトの追跡 (-L) などの高度な curl オプションの使い方
  4. 異なる HTTP メソッド (GET、POST、PUT、DELETE) を使った操作とデータの送信方法
  5. ファイルのダウンロードとダウンロード進捗の監視方法

これらのスキルは、システム管理、Web 開発、API テスト、自動化スクリプトなどの多くのタスクにおいて不可欠です。curl コマンドは様々な技術分野で広く使われており、ほぼすべての Linux ディストリビューション、macOS、さらには Windows でも利用できます。

Linux とネットワーキングの学習を続ける際には、この実験でカバーした以上に curl にはたくさんのオプションと機能があることを忘れないでください。詳細な情報が必要な場合は、いつでも curl マニュアル (man curl) を参照することができます。