Linux – curlでWebからファイルをダウンロードして保存する方法
curlコマンドを使用してWebからファイルをダウンロードし、保存するには、curl -oまたはcurl -Oオプションを利用します。
-oは保存するファイル名を指定でき、-OはURLのファイル名をそのまま使用します。
例えば、curl -o example.html https://example.comはexample.htmlとして保存し、curl -O https://example.com/file.txtはfile.txtとして保存します。
curlを使った基本的なダウンロード方法
curlは、コマンドラインからURLを指定してデータを取得するためのツールです。
Webからファイルをダウンロードする際に非常に便利です。
ここでは、基本的な使い方を紹介します。
基本的なコマンド
ファイルをダウンロードするための基本的なコマンドは以下の通りです。
curl -O http://example.com/file.txtこのコマンドでは、指定したURLからfile.txtというファイルをダウンロードし、現在のディレクトリに保存します。
-Oオプションは、URLのファイル名をそのまま使用して保存することを意味します。
コマンドの実行結果
上記のコマンドを実行すると、以下のような出力が表示されます。
file.txt 100% 123.45KB 123.45KB/s 0:00:01 (xfr#1, to-chk=0/1)この出力は、ダウンロードが成功したことを示しています。
ファイル名、ダウンロードサイズ、速度、所要時間などの情報が表示されます。
追加オプション
curlには、さまざまなオプションがあります。
以下は、よく使われるオプションの一部です。
| オプション | 説明 |
|---|---|
| -O | URLのファイル名で保存 |
| -o <file> | 指定したファイル名で保存 |
| -L | リダイレクトを追従する |
| -u <user:password> | 認証情報を指定する |
これらのオプションを組み合わせることで、より柔軟にファイルをダウンロードすることができます。
複数ファイルのダウンロード方法
curlを使用して複数のファイルを一度にダウンロードすることも可能です。
ここでは、複数のファイルを効率的にダウンロードする方法を紹介します。
複数のURLを指定する
複数のファイルをダウンロードする場合、URLをスペースで区切って指定することができます。
以下のコマンドを使用します。
curl -O http://example.com/file1.txt http://example.com/file2.txt http://example.com/file3.txtこのコマンドでは、file1.txt、file2.txt、file3.txtの3つのファイルを同時にダウンロードします。
コマンドの実行結果
上記のコマンドを実行すると、以下のような出力が表示されます。
file1.txt 100% 123.45KB 123.45KB/s 0:00:01 (xfr#1, to-chk=2/3)
file2.txt 100% 234.56KB 234.56KB/s 0:00:01 (xfr#2, to-chk=1/3)
file3.txt 100% 345.67KB 345.67KB/s 0:00:01 (xfr#3, to-chk=0/3)この出力では、各ファイルのダウンロード状況が表示されます。
ファイル名、ダウンロードサイズ、速度、所要時間などの情報がそれぞれのファイルについて示されます。
URLリストを使用する
複数のURLを手動で指定するのが面倒な場合、URLをリストファイルに保存し、そのファイルを指定してダウンロードすることもできます。
リストファイルの例は以下の通りです。
http://example.com/file1.txt
http://example.com/file2.txt
http://example.com/file3.txtこのリストファイルをurls.txtと名付けた場合、以下のコマンドで一括ダウンロードが可能です。
curl -O -K urls.txtコマンドの実行結果
リストファイルを使用した場合も、同様に各ファイルのダウンロード状況が表示されます。
file1.txt 100% 123.45KB 123.45KB/s 0:00:01 (xfr#1, to-chk=2/3)
file2.txt 100% 234.56KB 234.56KB/s 0:00:01 (xfr#2, to-chk=1/3)
file3.txt 100% 345.67KB 345.67KB/s 0:00:01 (xfr#3, to-chk=0/3)このように、curlを使えば複数のファイルを簡単にダウンロードすることができます。
リストファイルを活用することで、より効率的に作業を進めることが可能です。
ダウンロード時の進捗表示と制御
curlを使用してファイルをダウンロードする際、進捗状況を確認することができます。
また、進捗表示のスタイルや制御方法もカスタマイズ可能です。
ここでは、進捗表示のオプションとその制御方法について説明します。
デフォルトの進捗表示
curlを実行すると、デフォルトで進捗状況が表示されます。
以下のコマンドを実行してみましょう。
curl -O http://example.com/largefile.zipこのコマンドを実行すると、ダウンロード中に以下のような進捗表示が行われます。
largefile.zip 100% 1.23MB 1.23MB/s 0:00:01 (xfr#1, to-chk=0/1)進捗表示のスタイルを変更する
進捗表示のスタイルを変更するには、-#オプションを使用します。
このオプションを指定すると、プログレスバーが表示されます。
curl -# -O http://example.com/largefile.zipこのコマンドを実行すると、以下のようなプログレスバーが表示されます。
######################################################################## 100.0%進捗表示を無効にする
進捗表示が不要な場合は、-sオプションを使用してサイレントモードで実行することができます。
これにより、進捗状況やエラーメッセージが表示されなくなります。
curl -s -O http://example.com/largefile.zipこのコマンドを実行すると、何も表示されずにダウンロードが行われます。
進捗表示の詳細情報を表示する
進捗状況に加えて、詳細な情報を表示したい場合は、-wオプションを使用します。
このオプションを使うことで、ダウンロードの詳細情報をカスタマイズして表示できます。
curl -O -w "ダウンロード完了: %{size_download} バイト\n" http://example.com/largefile.zipこのコマンドを実行すると、ダウンロードが完了した後に、ダウンロードしたファイルのサイズが表示されます。
進捗表示の制御まとめ
| オプション | 説明 |
|---|---|
| -# | プログレスバーを表示 |
| -s | サイレントモード(進捗表示なし) |
| -w | ダウンロードの詳細情報を表示 |
これらのオプションを活用することで、curlを使ったファイルダウンロード時の進捗表示を自分の好みに合わせて制御することができます。
認証が必要なファイルのダウンロード
Webサイトからファイルをダウンロードする際、認証が必要な場合があります。
curlを使用すると、基本的な認証やその他の認証方式を利用してファイルをダウンロードすることができます。
ここでは、認証が必要なファイルのダウンロード方法を説明します。
基本認証を使用する
基本認証が必要な場合、-uオプションを使用してユーザー名とパスワードを指定します。
以下のコマンドを実行してみましょう。
curl -u username:password -O http://example.com/protectedfile.txtこのコマンドでは、usernameとpasswordを使用して認証を行い、protectedfile.txtをダウンロードします。
コマンドの実行結果
上記のコマンドを実行すると、認証が成功すれば以下のような出力が表示されます。
protectedfile.txt 100% 456.78KB 456.78KB/s 0:00:01 (xfr#1, to-chk=0/1)認証に失敗した場合は、401 Unauthorizedエラーが表示されます。
認証情報をファイルに保存する
認証情報をコマンドラインに直接書くのが不安な場合、認証情報を含むファイルを作成し、-nオプションを使用して指定することができます。
ファイルの内容は以下のようになります。
user=username
password=passwordこのファイルをauth.txtと名付けた場合、以下のコマンドでダウンロードが可能です。
curl -n -O http://example.com/protectedfile.txt --config auth.txtトークン認証を使用する
APIなどでトークン認証が必要な場合、-Hオプションを使用してAuthorizationヘッダーを追加します。
以下のコマンドを実行します。
curl -H "Authorization: Bearer your_token" -O http://example.com/protectedfile.txtこのコマンドでは、your_tokenを使用して認証を行い、ファイルをダウンロードします。
認証が必要なファイルのダウンロードまとめ
| 認証方式 | コマンド例 |
|---|---|
| 基本認証 | curl -u username:password -O URL |
| 認証情報ファイル | curl -n -O URL --config auth.txt |
| トークン認証 | curl -H "Authorization: Bearer your_token" -O URL |
これらの方法を使用することで、認証が必要なファイルをcurlで簡単にダウンロードすることができます。
必要に応じて、適切な認証方式を選択してください。
プロキシを利用したダウンロード
curlを使用してファイルをダウンロードする際、プロキシサーバーを経由することができます。
プロキシを利用することで、特定のネットワーク環境やセキュリティ要件に対応することが可能です。
ここでは、プロキシを利用したダウンロード方法について説明します。
HTTPプロキシを指定する
HTTPプロキシを使用する場合、-xオプションを使ってプロキシサーバーのアドレスを指定します。
以下のコマンドを実行してみましょう。
curl -x http://proxy.example.com:8080 -O http://example.com/file.txtこのコマンドでは、proxy.example.comの8080ポートを使用してプロキシ経由でfile.txtをダウンロードします。
コマンドの実行結果
上記のコマンドを実行すると、プロキシを通じてファイルがダウンロードされ、以下のような出力が表示されます。
file.txt 100% 123.45KB 123.45KB/s 0:00:01 (xfr#1, to-chk=0/1)認証付きプロキシの利用
認証が必要なプロキシを使用する場合、-Uオプションを使ってユーザー名とパスワードを指定します。
以下のコマンドを実行します。
curl -x http://proxy.example.com:8080 -U username:password -O http://example.com/file.txtこのコマンドでは、プロキシサーバーに対してusernameとpasswordを使用して認証を行い、ファイルをダウンロードします。
SOCKSプロキシを指定する
SOCKSプロキシを使用する場合は、--socks5オプションを使用します。
以下のコマンドを実行してみましょう。
curl --socks5 socks5://proxy.example.com:1080 -O http://example.com/file.txtこのコマンドでは、SOCKS5プロキシを経由してファイルをダウンロードします。
プロキシ設定の確認
プロキシ設定が正しく行われているか確認するためには、以下のコマンドを使用してプロキシの情報を表示できます。
curl -x http://proxy.example.com:8080 -I http://example.comこのコマンドを実行すると、HTTPヘッダー情報が表示され、プロキシ経由での接続が確認できます。
プロキシを利用したダウンロードまとめ
| プロキシタイプ | コマンド例 |
|---|---|
| HTTPプロキシ | curl -x http://proxy.example.com:8080 -O URL |
| 認証付きプロキシ | curl -x http://proxy.example.com:8080 -U username:password -O URL |
| SOCKSプロキシ | curl --socks5 socks5://proxy.example.com:1080 -O URL |
これらの方法を使用することで、プロキシを経由してファイルをダウンロードすることができます。
必要に応じて、適切なプロキシ設定を選択してください。
HTTPS通信と証明書の扱い
curlを使用してHTTPS通信を行う際、SSL/TLS証明書の検証が行われます。
これにより、安全な通信が確保されますが、場合によっては証明書の扱いに注意が必要です。
ここでは、HTTPS通信と証明書の扱いについて説明します。
HTTPS通信の基本
HTTPS通信を行う場合、通常のHTTPと同様にURLを指定するだけで、curlは自動的にHTTPSプロトコルを使用します。
以下のコマンドを実行してみましょう。
curl -O https://example.com/securefile.txtこのコマンドでは、securefile.txtをHTTPS経由でダウンロードします。
証明書が正当であれば、問題なくダウンロードが行われます。
証明書の検証を無効にする
自己署名証明書や信頼されていない証明書を使用している場合、curlはデフォルトで接続を拒否します。
この場合、-kまたは--insecureオプションを使用して証明書の検証を無効にすることができます。
curl -k -O https://example.com/securefile.txtこのコマンドを実行すると、証明書の検証をスキップしてファイルをダウンロードしますが、セキュリティリスクがあるため注意が必要です。
特定の証明書を指定する
特定のCA証明書を使用して接続する場合、--cacertオプションを使用して証明書ファイルを指定できます。
以下のコマンドを実行します。
curl --cacert /path/to/certificate.crt -O https://example.com/securefile.txtこのコマンドでは、指定した証明書を使用してHTTPS接続を行います。
これにより、特定の証明書を信頼することができます。
証明書の情報を表示する
ダウンロードする際に使用される証明書の情報を確認するには、-vオプションを使用して詳細な出力を表示します。
以下のコマンドを実行します。
curl -v https://example.com/securefile.txtこのコマンドを実行すると、SSL/TLSハンドシェイクの詳細や証明書の情報が表示されます。
HTTPS通信と証明書の扱いまとめ
| 操作内容 | コマンド例 |
|---|---|
| HTTPS通信の基本 | curl -O https://example.com/securefile.txt |
| 証明書の検証を無効にする | curl -k -O https://example.com/securefile.txt |
| 特定の証明書を指定する | curl --cacert /path/to/certificate.crt -O https://example.com/securefile.txt |
| 証明書の情報を表示する | curl -v https://example.com/securefile.txt |
これらの方法を使用することで、HTTPS通信を安全に行い、証明書の扱いを適切に管理することができます。
セキュリティを考慮しながら、必要に応じて適切なオプションを選択してください。
エラー時の対処法
curlを使用してファイルをダウンロードする際、さまざまなエラーが発生することがあります。
ここでは、一般的なエラーとその対処法について説明します。
1. 404 Not Found
エラー内容: 指定したURLが存在しない場合に表示されます。
対処法:
- URLが正しいか確認します。
- リンクが変更されていないか、またはファイルが削除されていないかを確認します。
curl -O http://example.com/nonexistentfile.txt出力例:
404 Not Found2. 403 Forbidden
エラー内容: アクセス権限がない場合に表示されます。
対処法:
- 認証が必要な場合は、適切な認証情報を指定します。
- アクセス制限がかかっている場合は、管理者に問い合わせます。
curl -u username:password -O http://example.com/protectedfile.txt出力例:
403 Forbidden3. 500 Internal Server Error
エラー内容: サーバー側で問題が発生した場合に表示されます。
対処法:
- サーバーの状態を確認します。
- 一時的な問題である可能性があるため、時間をおいて再試行します。
curl -O http://example.com/servererrorfile.txt出力例:
500 Internal Server Error4. SSL/TLSエラー
エラー内容: SSL/TLS証明書の検証に失敗した場合に表示されます。
対処法:
-kオプションを使用して証明書の検証を無効にします(セキュリティリスクに注意)。- 正しいCA証明書を指定する場合は、
--cacertオプションを使用します。
curl -k -O https://example.com/securefile.txt出力例:
SSL certificate problem: unable to get local issuer certificate5. タイムアウトエラー
エラー内容: サーバーからの応答が遅すぎる場合に表示されます。
対処法:
- ネットワーク接続を確認します。
--connect-timeoutオプションを使用してタイムアウト時間を設定します。
curl --connect-timeout 10 -O http://example.com/slowfile.txt出力例:
curl: (28) Connection timed out after 10001 millisecondsエラー時のデバッグ情報
エラーの詳細を確認するためには、-vオプションを使用して詳細な出力を表示します。
これにより、HTTPヘッダーやエラーメッセージの詳細が確認できます。
curl -v http://example.com/file.txtエラー時の対処法まとめ
| エラー内容 | 対処法 |
|---|---|
| 404 Not Found | URLを確認する |
| 403 Forbidden | 認証情報を指定する |
| 500 Internal Server Error | サーバーの状態を確認する |
| SSL/TLSエラー | 証明書の検証を無効にするまたはCA証明書を指定する |
| タイムアウトエラー | ネットワーク接続を確認し、タイムアウトを設定する |
これらの対処法を参考にして、curlを使用したファイルダウンロード時のエラーに適切に対処してください。
まとめ
この記事では、curlを使用してWebからファイルをダウンロードする方法について、基本的な使い方から認証、プロキシ、HTTPS通信、エラー時の対処法まで幅広く解説しました。
これにより、さまざまな状況に応じたファイルダウンロードの手法を理解し、実践するための具体的な手順を知ることができました。
今後は、これらの知識を活用して、より効率的にファイルをダウンロードし、必要に応じて適切なオプションを選択して作業を進めてみてください。