ネットワーク 初級

curl・wgetコマンド入門 ― HTTPリクエストとファイル取得を使いこなす

curlとwgetを使ったHTTPリクエストの送信・ファイルのダウンロード・APIの呼び出し方法を、実例とともに丁寧に解説します。

はじめに

Linuxには、コマンドラインからインターネットへアクセスするための強力なツールが標準で用意されています。 代表的なのが curlwget です。

ツール特徴
curlHTTP/HTTPS 以外のプロトコルにも対応。APIとのやり取りや細かいオプション指定が得意
wgetファイルのダウンロードに特化。再帰ダウンロードやリトライが簡単

このチュートリアルでは、どちらのコマンドも「何ができるのか」をステップ形式で学んでいきます。


curl の基本

インストール確認

多くのディストリビューションには最初から入っています。

curl --version

インストールされていない場合:

# Debian/Ubuntu
sudo apt install curl

# RHEL/CentOS/Fedora
sudo dnf install curl

ステップ 1 ― URLにGETリクエストを送る

最もシンプルな使い方です。

curl https://httpbin.org/get

このコマンドは指定したURLのレスポンスボディを標準出力に表示します。
httpbin.org はリクエストの内容をそのまま返してくれるテスト用サービスです。


ステップ 2 ― レスポンスヘッダーを確認する

# ヘッダーのみ表示(-I = --head)
curl -I https://example.com

# ヘッダーとボディを両方表示(-i)
curl -i https://example.com

実行例:

HTTP/2 200
content-type: text/html; charset=UTF-8
date: Tue, 22 Jul 2026 00:00:00 GMT
...

ステータスコード(200, 404, 500 など)やコンテンツタイプを確認できます。


ステップ 3 ― ファイルとして保存する

# -O: URLのファイル名で保存
curl -O https://example.com/sample.txt

# -o: 保存名を指定
curl -o myfile.txt https://example.com/sample.txt

大きなファイルをダウンロードするときは -# でプログレスバーを表示できます:

curl -O -# https://example.com/largefile.tar.gz

ステップ 4 ― POSTリクエストを送る

フォームデータの送信やAPIへのデータ投稿に使います。

# フォームデータを送る(application/x-www-form-urlencoded)
curl -X POST https://httpbin.org/post \
  -d "name=Taro&age=30"

# JSONデータを送る
curl -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"name": "Taro", "age": 30}'

-H はリクエストヘッダーを追加するオプションです。


ステップ 5 ― 認証情報を付ける

# Basic認証
curl -u username:password https://example.com/api

# Bearer トークン(よく使われる)
curl -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/data

ステップ 6 ― リダイレクトに対応する

デフォルトでは curl はリダイレクトを追いかけません。-L をつけると追いかけます。

curl -L https://bit.ly/some-shortened-url

ステップ 7 ― 詳細なログを見る(デバッグ)

curl -v https://httpbin.org/get

-v(verbose)をつけると、接続の確立からヘッダーのやり取りまで詳細に表示されます。
問題の調査や学習に役立ちます。


wget の基本

インストール確認

wget --version

インストールされていない場合:

# Debian/Ubuntu
sudo apt install wget

# RHEL/CentOS/Fedora
sudo dnf install wget

ステップ 1 ― ファイルをダウンロードする

wget https://example.com/sample.txt

カレントディレクトリにファイルが保存されます。

# 保存先のファイル名を指定(-O)
wget -O myfile.txt https://example.com/sample.txt

# 保存先ディレクトリを指定(-P)
wget -P /tmp/downloads https://example.com/sample.txt

ステップ 2 ― ダウンロードの再開(レジューム)

大きなファイルをダウンロード中に中断したとき、続きから再開できます。

wget -c https://example.com/largefile.iso

-c--continue)は部分的にダウンロード済みのファイルを検出して続きから取得します。


ステップ 3 ― バックグラウンドでダウンロード

wget -b https://example.com/hugefile.tar.gz

-b--background)をつけるとバックグラウンドで実行され、wget-log にログが記録されます。

# ログを確認
tail -f wget-log

ステップ 4 ― リトライ回数を指定する

ネットワークが不安定なときに便利です。

# 最大10回リトライ
wget --tries=10 https://example.com/sample.txt

# 無制限にリトライ
wget --tries=0 https://example.com/sample.txt

ステップ 5 ― Webサイトを丸ごとミラーする

wget --mirror --convert-links --adjust-extension \
     --page-requisites --no-parent \
     https://example.com/

各オプションの意味:

オプション説明
--mirrorミラーリングモード(再帰・タイムスタンプ比較など)
--convert-linksローカルで閲覧できるようにリンクを変換
--adjust-extension拡張子を適切に調整
--page-requisitesページ表示に必要な画像・CSSなども取得
--no-parent指定ディレクトリより上には遡らない

curl と wget の使い分けまとめ

やりたいこと推奨ツール
REST APIを叩くcurl
POSTリクエストを送るcurl
ヘッダーを細かく制御するcurl
単純なファイルダウンロードwget
中断したダウンロードの再開wget
サイトの再帰的ミラーリングwget

練習問題

問題 1

https://httpbin.org/get にGETリクエストを送り、レスポンスを response.json という名前で保存してください。

問題 2

curl コマンドを使って、https://httpbin.org/post に以下のJSONデータをPOSTしてください:

{"user": "linux_learner", "level": "beginner"}

問題 3

wget を使って https://example.com/ のHTMLファイルを example.html という名前で保存してください。 また、途中で中断された場合でも再開できるオプションを一緒につけてください。

問題 4(応用)

curl-v オプションと -I オプションの違いを説明してください。また、どのような場面でそれぞれを使うか考えてみましょう。


解答

解答 1

curl -o response.json https://httpbin.org/get

-o でファイル名を指定して保存します。


解答 2

curl -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"user": "linux_learner", "level": "beginner"}'

-X POST でHTTPメソッドをPOSTに、-H でContent-Typeヘッダーを指定し、-d でボディを渡します。


解答 3

wget -c -O example.html https://example.com/

-c で再開可能にし、-O example.html で保存先ファイル名を指定します。


解答 4

オプション表示内容用途
-Iレスポンスヘッダーのみ(HEADリクエスト)ステータスコードやContent-Typeを素早く確認したいとき
-vリクエスト・レスポンス両方の詳細(HEADERとBODY)接続の詳細を追ったり、問題をデバッグするとき

-I はボディを取得しないので高速です。-v はすべての通信の詳細が見られるためデバッグに向いています。


まとめ

  • curl はHTTPリクエストを細かく制御できるため、APIの呼び出しやデバッグに最適
  • wgetシンプルなダウンロードや再開・ミラーリングが得意
  • 両方のコマンドを場面に応じて使い分けることで、ターミナルからのWeb操作が格段に効率アップします

次のステップとして、実際にパブリックなAPIを叩いてみたり、スクリプト内で curl を組み込んでデータ取得を自動化してみましょう!