2026年7月8日

2026年7月8日

wgetとcurlでファイルをダウンロードする方法

はじめに

wgetとcurlはどちらもHTTP/HTTPS/FTPでファイルを取得するLinuxの定番コマンドです。一見似ていますが、wgetは「ファイルダウンロードに特化」、curlは「あらゆるプロトコルでデータ転送する万能ツール」という違いがあります。

スクリプトでパッケージを取得する、APIを叩く、サイトをミラーするなど用途別に使い分けると効率的です。本記事では両者の使い方と使い分けの判断基準を解説します。

症状・背景

wget・curl が必要になる主な場面:

  • パッケージや設定ファイルをサーバーにダウンロードしたい
  • APIを叩いてレスポンスをjqなどで処理したい
  • バックアップファイルを別サーバーからダウンロードしたい
  • 監視・ヘルスチェック用にWebサイトのステータスコードを取得したい

手順・設定方法

ステップ1: wget の基本

# シンプルなダウンロード(URLのファイル名で保存)
wget https://example.com/file.tar.gz

# 保存名を指定(-O)
wget -O myfile.zip https://example.com/archive.zip

# 出力ディレクトリを指定(-P)
wget -P /tmp/ https://example.com/file.zip

# 再開ダウンロード(-c: continue)
wget -c https://example.com/big.iso

# 静かなモード(-q)、進捗のみ(--show-progress)
wget -q --show-progress https://example.com/file.zip

ステップ2: curl の基本

# 標準出力に表示(デフォルト)
curl https://example.com/

# ファイルに保存(-O: URLの名前で、-o: 名前指定)
curl -O https://example.com/file.tar.gz
curl -o myfile.zip https://example.com/archive.zip

# リダイレクトを追跡(-L)
curl -L https://bit.ly/short-url

# プログレスバー表示(-#)と静音モード(-s)
curl -# -O https://example.com/file.zip
curl -sS https://example.com/api  # -sS: エラーは表示

ステップ3: API呼び出し・ヘッダー操作

# HTTPヘッダーのみ取得(-I: HEAD)
curl -I https://example.com/

# 認証ヘッダー付きでGET
curl -H "Authorization: Bearer TOKEN" https://api.example.com/users

# POSTリクエスト(JSON送信)
curl -X POST https://api.example.com/login \
  -H "Content-Type: application/json" \
  -d '{"user":"alice","pass":"secret"}'

# ファイルアップロード(multipart)
curl -X POST https://api.example.com/upload \
  -F "file=@/path/to/local.zip"

# レスポンスヘッダーとステータスコードを取得
curl -w "HTTP %{http_code}\n" -o /dev/null -s https://example.com/

ステップ4: 実践テクニック

# wget でサイトをミラーリング
wget --mirror --convert-links --page-requisites https://example.com/

# 認証付きFTPダウンロード
wget --user=alice --password=secret ftp://server/file.tar

# curl で複数URLを順次ダウンロード
curl -O https://example.com/file[1-5].zip

# プロキシ経由でアクセス
curl -x http://proxy:8080 https://example.com/

# タイムアウト設定(接続5秒、合計30秒)
curl --connect-timeout 5 --max-time 30 https://slow.example.com/

# 監視用:HTTPステータスのみ取得
curl -o /dev/null -s -w "%{http_code}\n" https://example.com/health

注意事項

  • パスワードを -u user:pass で渡すと履歴に残るため、.netrc や環境変数を使うのが安全
  • HTTPS証明書の検証無効化(-k / --no-check-certificate)は緊急時のみ。本番では絶対に使わない
  • 大きなファイルは -c(wget)や -C -(curl)で再開ダウンロードを活用
  • スクリプト内では set -e と組み合わせ、curl --fail を付けてエラー時に終了コードを返す

まとめ

1. 使い分け: ファイル取得は wget、API操作・スクリプト連携は curl

2. 保存先: wget は -O / -P、curl は -o / -O で制御

3. HTTP操作: curl は -X でメソッド、-H でヘッダー、-d でデータ送信

4. 再開: 大容量ファイルは wget -c または curl -C - で中断後も再開可能

5. 監視: curl -w "%{http_code}" でステータスコードのみ取得し監視に活用

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ