[Linux] curlでWebからファイルをダウンロードして保存する方法

Linuxでcurlを使用してWebからファイルをダウンロードし、ローカルに保存するには、curlコマンドに-oまたは-Oオプションを使用します。

-oは指定したファイル名で保存し、-OはURLのファイル名をそのまま使用して保存します。

例えば、curl -o localfile.txt http://example.com/file.txtlocalfile.txtとして保存し、curl -O http://example.com/file.txtfile.txtとして保存します。

この記事でわかること
  • curlの基本的な使い方
  • HTTPリクエストの制御方法
  • 認証が必要なダウンロード手法
  • プロキシ経由でのファイル取得
  • エラーハンドリングのテクニック

目次から探す

curlとは何か

curlは、コマンドラインからURLを指定してデータを転送するためのツールです。

主にHTTP、HTTPS、FTPなどのプロトコルを使用して、Webサーバーからファイルをダウンロードしたり、サーバーにデータをアップロードしたりする際に利用されます。

curlは非常に多機能で、リクエストヘッダーの設定や認証、プロキシの使用、SSL/TLSのサポートなど、さまざまなオプションを提供しています。

これにより、開発者やシステム管理者は、スクリプトや自動化ツールの一部としてcurlを活用し、効率的にデータの取得や送信を行うことができます。

特に、APIとの連携やファイルのダウンロードにおいて、その利便性が高く評価されています。

curlでファイルをダウンロードする基本コマンド

-oオプションでファイル名を指定して保存

curlを使用してファイルをダウンロードする際、-oオプションを使うことで、保存するファイル名を指定できます。

以下のコマンドは、指定したURLからファイルをダウンロードし、myfile.txtという名前で保存します。

curl -o myfile.txt https://example.com/file.txt

このコマンドを実行すると、myfile.txtという名前のファイルが作成され、指定したURLの内容が保存されます。

-Oオプションで元のファイル名を保持して保存

-Oオプションを使用すると、ダウンロードしたファイルが元のファイル名で保存されます。

以下のコマンドは、指定したURLからファイルをダウンロードし、元のファイル名を保持します。

curl -O https://example.com/file.txt

この場合、file.txtという名前のファイルがカレントディレクトリに保存されます。

ダウンロードの進捗を表示する方法

curlはデフォルトでダウンロードの進捗を表示しますが、-#オプションを追加することで、より視覚的なプログレスバーを表示することができます。

以下のコマンドを使用します。

curl -# -O https://example.com/file.txt

このコマンドを実行すると、ダウンロードの進捗がバー形式で表示されます。

複数のファイルを一度にダウンロードする方法

複数のファイルを一度にダウンロードするには、URLをスペースで区切って指定します。

以下のコマンドは、2つのファイルを同時にダウンロードします。

curl -O https://example.com/file1.txt -O https://example.com/file2.txt

このコマンドを実行すると、file1.txtfile2.txtがそれぞれ元のファイル名で保存されます。

HTTPリクエストの制御

ヘッダー情報を指定してダウンロードする

curlを使用すると、HTTPリクエストにカスタムヘッダーを追加することができます。

-Hオプションを使って、任意のヘッダーを指定できます。

以下のコマンドは、Authorizationヘッダーを追加してファイルをダウンロードします。

curl -H "Authorization: Bearer YOUR_TOKEN" -O https://example.com/protected-file.txt

このコマンドを実行すると、指定したトークンを使用して認証されたリソースからファイルがダウンロードされます。

ユーザーエージェントを指定する

特定のユーザーエージェントを指定してリクエストを送信することも可能です。

-Aオプションを使用して、ユーザーエージェントを設定します。

以下のコマンドは、Google Chromeのユーザーエージェントを指定してファイルをダウンロードします。

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" -O https://example.com/file.txt

このコマンドを実行すると、指定したユーザーエージェントでリクエストが送信されます。

リファラを指定する

リファラを指定することで、どのページからリクエストが送信されたかを示すことができます。

-eオプションを使用してリファラを設定します。

以下のコマンドは、リファラを指定してファイルをダウンロードします。

curl -e "https://example.com/previous-page" -O https://example.com/file.txt

このコマンドを実行すると、指定したリファラ情報がリクエストに含まれます。

クッキーを使用してダウンロードする

クッキーを使用して認証されたリソースからファイルをダウンロードすることも可能です。

-bオプションを使ってクッキーを指定します。

以下のコマンドは、クッキーを使用してファイルをダウンロードします。

curl -b "session_id=YOUR_SESSION_ID" -O https://example.com/protected-file.txt

このコマンドを実行すると、指定したセッションIDを使用して認証されたリソースからファイルがダウンロードされます。

認証が必要なサイトからのダウンロード

ベーシック認証を使用する

ベーシック認証が必要なサイトからファイルをダウンロードするには、-uオプションを使用してユーザー名とパスワードを指定します。

以下のコマンドは、ベーシック認証を使用してファイルをダウンロードします。

curl -u username:password -O https://example.com/protected-file.txt

このコマンドを実行すると、指定したユーザー名とパスワードを使用して認証されたリソースからファイルがダウンロードされます。

トークン認証を使用する

トークン認証を使用する場合、通常はHTTPヘッダーにトークンを含めてリクエストを送信します。

-Hオプションを使って、Authorizationヘッダーにトークンを指定します。

以下のコマンドは、トークン認証を使用してファイルをダウンロードします。

curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" -O https://example.com/protected-file.txt

このコマンドを実行すると、指定したトークンを使用して認証されたリソースからファイルがダウンロードされます。

クッキーを保存して再利用する

クッキーを使用して認証を行う場合、最初にクッキーを保存し、その後再利用することができます。

-cオプションを使ってクッキーを保存し、-bオプションを使って再利用します。

以下の手順で行います。

  1. クッキーを保存するコマンド:
curl -c cookies.txt -u username:password https://example.com/login
  1. 保存したクッキーを使用してファイルをダウンロードするコマンド:
curl -b cookies.txt -O https://example.com/protected-file.txt

この手順を実行すると、最初のリクエストで取得したクッキーを使用して、認証されたリソースからファイルがダウンロードされます。

プロキシを経由してダウンロードする

プロキシサーバーの指定方法

curlを使用してプロキシサーバーを経由してファイルをダウンロードするには、-xオプションを使用してプロキシのURLを指定します。

以下のコマンドは、HTTPプロキシを指定してファイルをダウンロードします。

curl -x http://proxy.example.com:8080 -O https://example.com/file.txt

このコマンドを実行すると、指定したプロキシサーバーを経由してfile.txtがダウンロードされます。

プロキシのURLには、プロトコル(httpまたはhttps)、ホスト名、ポート番号を含める必要があります。

認証付きプロキシの設定方法

認証が必要なプロキシサーバーを使用する場合、-xオプションに加えて、-Uオプションを使用してユーザー名とパスワードを指定します。

以下のコマンドは、認証付きプロキシを経由してファイルをダウンロードします。

curl -x http://proxy.example.com:8080 -U username:password -O https://example.com/file.txt

このコマンドを実行すると、指定したユーザー名とパスワードを使用して認証されたプロキシサーバーを経由し、file.txtがダウンロードされます。

プロキシの設定を正しく行うことで、セキュリティやアクセス制限のあるネットワーク環境でもファイルを取得することが可能です。

ダウンロードのエラーハンドリング

HTTPステータスコードを確認する

curlを使用してファイルをダウンロードする際、HTTPステータスコードを確認することで、リクエストの結果を把握できます。

-wオプションを使って、リクエストの結果を表示することができます。

以下のコマンドは、ダウンロード後にHTTPステータスコードを表示します。

curl -O https://example.com/file.txt -w "%{http_code}\n"

このコマンドを実行すると、ファイルが正常にダウンロードされた場合は200が表示され、リクエストが失敗した場合は他のステータスコードが表示されます。

これにより、エラーの原因を特定する手助けになります。

タイムアウトを設定する

ダウンロードが長時間かかる場合、タイムアウトを設定することで、無限に待たされることを防げます。

--connect-timeoutオプションを使用して接続のタイムアウトを設定し、--max-timeオプションで全体のタイムアウトを設定します。

以下のコマンドは、接続タイムアウトを5秒、全体のタイムアウトを30秒に設定します。

curl --connect-timeout 5 --max-time 30 -O https://example.com/file.txt

このコマンドを実行すると、接続が5秒以内に確立できない場合や、ダウンロードが30秒以内に完了しない場合は、エラーが発生します。

リトライ回数を指定する

ダウンロードが失敗した場合に自動的にリトライする機能を利用することもできます。

--retryオプションを使用して、リトライ回数を指定します。

以下のコマンドは、最大3回リトライを行います。

curl --retry 3 -O https://example.com/file.txt

このコマンドを実行すると、ダウンロードが失敗した場合に最大3回まで自動的に再試行されます。

これにより、一時的なネットワークの問題などによる失敗を回避することができます。

応用例

部分的にファイルをダウンロードする(レジューム機能)

curlは、ダウンロードが中断された場合に再開できるレジューム機能をサポートしています。

-C -オプションを使用することで、途中からダウンロードを再開できます。

以下のコマンドは、指定したURLからファイルを部分的にダウンロードします。

curl -C - -O https://example.com/largefile.zip

このコマンドを実行すると、前回のダウンロードが中断された位置から再開され、ファイルが完全にダウンロードされます。

FTPサーバーからファイルをダウンロードする

curlはFTPプロトコルを使用してファイルをダウンロードすることもできます。

ftp://を指定して、FTPサーバーからファイルを取得します。

以下のコマンドは、FTPサーバーからファイルをダウンロードします。

curl -O ftp://ftp.example.com/file.txt

このコマンドを実行すると、指定したFTPサーバーからfile.txtがダウンロードされます。

必要に応じて、ユーザー名とパスワードを指定することも可能です。

HTTPSサイトから安全にダウンロードする

HTTPSサイトからファイルを安全にダウンロードするには、特別な設定は必要ありません。

curlはデフォルトでHTTPSをサポートしています。

以下のコマンドは、HTTPSサイトからファイルをダウンロードします。

curl -O https://secure.example.com/file.txt

このコマンドを実行すると、SSL/TLSを使用して安全にファイルがダウンロードされます。

必要に応じて、証明書の検証を無効にするオプションもありますが、セキュリティ上のリスクがあるため注意が必要です。

APIからデータを取得して保存する

curlを使用してAPIからデータを取得し、ファイルに保存することもできます。

以下のコマンドは、JSONデータをAPIから取得し、data.jsonというファイルに保存します。

curl -o data.json https://api.example.com/data

このコマンドを実行すると、指定したAPIから取得したデータがdata.jsonに保存されます。

APIの認証が必要な場合は、適切なヘッダーを追加することも可能です。

ダウンロードしたファイルをパイプで他のコマンドに渡す

curlでダウンロードしたファイルを、他のコマンドにパイプで渡すことができます。

以下のコマンドは、ダウンロードしたファイルをgrepコマンドでフィルタリングします。

curl -s https://example.com/file.txt | grep "特定の文字列"

このコマンドを実行すると、指定したURLからファイルをダウンロードし、その内容から「特定の文字列」を含む行だけが表示されます。

-sオプションは、進捗表示を抑制するために使用されています。

よくある質問

curlでダウンロードが途中で止まるのはなぜ?

curlでダウンロードが途中で止まる原因はいくつか考えられます。

主な理由は以下の通りです。

  • ネットワークの不安定: インターネット接続が不安定な場合、ダウンロードが中断されることがあります。
  • サーバーの問題: ダウンロード先のサーバーが一時的にダウンしている、または過負荷になっている可能性があります。
  • ファイアウォールやプロキシ: ネットワークの設定によっては、特定のトラフィックがブロックされることがあります。

このような場合は、接続を確認し、必要に応じて再試行することが推奨されます。

レジューム機能を使用することで、途中から再開することも可能です。

curlでダウンロードしたファイルが壊れている場合の対処法は?

ダウンロードしたファイルが壊れている場合、以下の対処法を試みることができます。

  • 再ダウンロード: 一時的なエラーが原因である可能性があるため、再度ダウンロードを試みます。
  • ファイルの整合性チェック: ダウンロード元が提供しているハッシュ値(MD5やSHA256など)と照合し、ファイルが正しいか確認します。
  • HTTPステータスコードの確認: ダウンロード時にHTTPステータスコードを確認し、エラーが発生していないか確認します。

これらの手順を踏むことで、ファイルの問題を特定し、解決する手助けになります。

curlでダウンロード速度を制限する方法は?

curlでは、--limit-rateオプションを使用してダウンロード速度を制限することができます。

このオプションを使うことで、指定した速度以下でダウンロードを行うことができます。

以下のコマンドは、ダウンロード速度を100KB/sに制限します。

curl --limit-rate 100K -O https://example.com/file.txt

このコマンドを実行すると、ダウンロード速度が100KB/sに制限され、ネットワークの帯域を他のアプリケーションと共有することができます。

速度の単位は、K(キロバイト)、M(メガバイト)、G(ギガバイト)などで指定できます。

まとめ

この記事では、curlを使用してWebからファイルをダウンロードする方法について、基本的なコマンドから応用例まで幅広く解説しました。

特に、認証が必要なサイトからのダウンロードやプロキシを経由したダウンロード、エラーハンドリングのテクニックなど、実践的な知識を提供しました。

これらの情報を活用して、さまざまなシチュエーションでのファイルダウンロードを効率的に行ってみてください。

  • URLをコピーしました!
目次から探す