[Linux] curlでWebからファイルをダウンロードして保存する方法
Linuxでcurl
を使用してWebからファイルをダウンロードし、ローカルに保存するには、curl
コマンドに-o
または-O
オプションを使用します。
-o
は指定したファイル名で保存し、-O
はURLのファイル名をそのまま使用して保存します。
例えば、curl -o localfile.txt http://example.com/file.txt
はlocalfile.txt
として保存し、curl -O http://example.com/file.txt
はfile.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.txt
とfile2.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
オプションを使って再利用します。
以下の手順で行います。
- クッキーを保存するコマンド:
curl -c cookies.txt -u username:password https://example.com/login
- 保存したクッキーを使用してファイルをダウンロードするコマンド:
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
を使用してWebからファイルをダウンロードする方法について、基本的なコマンドから応用例まで幅広く解説しました。
特に、認証が必要なサイトからのダウンロードやプロキシを経由したダウンロード、エラーハンドリングのテクニックなど、実践的な知識を提供しました。
これらの情報を活用して、さまざまなシチュエーションでのファイルダウンロードを効率的に行ってみてください。