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

基本的な構文から高度なオプションまでを含む、cURLでの効率的なファイルのダウンロード方法を学び、cURLとWgetの簡単な比較を行いましょう。
4 min read
How to download files with curl blog image

このガイドでは、次の内容について説明します。

  • 基本的なcURLダウンロードファイル構文
  • cURLでファイルをダウンロードする際の複雑なシナリオの処理方法
  • 複数のファイルを同時にダウンロードする方法
  • cURLを効果的に使用するためのベストプラクティス
  • cURLとWgetの簡単な比較

さっそく始めましょう!

基本的なcURLダウンロードファイル構文

これが、最も基本的なcURLダウンロードファイルの構文となります。

curl -O <file_url>

:Windowsでは、 curl を curl.exeに置き換えてください。この操作が必要となるのは、 curl がWindows PowerShellにおける Invoke-WebRequest のエイリアスであり、 curl.exe が明示的にcURLコマンドラインツールを実行するためです。

 -O フラグは、 <file_url>で指定されたURLから、ダウンロードしたファイルを元の名前で保存するようにcURLに指示します。同様に、 --remote-nameを使用することもできます。

curl --remote-name <file_url>

例として、次のダウンロードファイルcURLコマンドについて考えてみましょう。

curl -O "https://i.imgur.com/CSRiAeN.jpg"

これにより、以下のようなダウンロードプログレスバーが表示された出力が生成されます。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   155k      0 --:--:-- --:--:-- --:--:--  158k

進行状況が100%に達すると、cURLコマンドを実行したフォルダに CSRiAeN.jpg という名前のファイルが表示されます。

cURLが起動されたフォルダにダウンロードされるCSRiAeN.jpgファイル

cURLについての概要と提供されるオプションの詳細については、 cURLガイドをご覧ください。より複雑なシナリオについて学ぶときがきました!

cURLを使用したファイルのダウンロード:高度なオプション

cURLダウンロードファイルの基本構文の次は、追加オプションによりコマンドをカスタマイズする方法を学びます。

ダウンロードしたファイル名の変更

 -O オプションは、デフォルトではターゲットURLで指定されたファイルを元の名前でダウンロードします。URLで指定されたリモートファイルに名前が含まれていない場合、cURLは curl_responseという拡張子のないファイルを作成します。

cURLが起動されたフォルダ内のデフォルトのcurl_responseファイル

cURLはこの動作を通知する警告も出力します。

Warning: No remote file name, uses "curl_response"

ダウンロードされたファイルのカスタム名を指定するには、次のように -o (または --output)フラグをご使用ください。

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg"

このコマンドは、指定されたファイルURLにGETリクエストを実行するようcURLに指示します。これにより、ダウンロードしたコンテンツはstdoutに出力されず、 -o の後に指定された名前で保存されます。

今回の出力ファイルは logo.jpg ファイルになります。

cURLが起動されたフォルダにダウンロードされるlogo.jpgファイル

リダイレクトのフォロー

一部のURLは目的のファイルを直接指定しないため、最終的な宛先に到達するには自動リダイレクトが必要となります。

cURLにリダイレクトに従うよう指示するには、 -L オプションを使用する必要があります。

curl -O -L "<file_url>"

 -L フラグがない場合、cURLはリダイレクトレスポンスヘッダー( 301 Moved Permanently や 302 Foundなど)を出力します。具体的に言うと、 Location ヘッダーで提供される新しい場所に自動的には従いません。

サーバーとの認証

一部のサーバーはリソースへのアクセスを制限し、ユーザー認証を必要とします。基本的なHTTPまたはFTP認証を実行するには、 -u (または --user)オプションを使用することができます。これにより、ユーザー名とパスワードを次の形式で指定することができます。

<username>:<password>

ユーザー名とパスワードはコロン(:)で区切られているため、ユーザー名にコロンを含めることはできません。ただし、パスワードにはコロンを含めることができます。

 <password> 文字列は任意です。ユーザー名のみを指定すると、cURLはパスワードの入力を求めます。

cURLでサーバー認証を使用してファイルをダウンロードする場合の構文は次のとおりです。

curl -O -u <username>:<password> <file_url>

例として、次のコマンドを使用することにより、認証付きのURLから .png ファイルをダウンロードすることができます。

curl -O -u "myUser:myPassword" "https://example.com/secret.txt"

cURLは、認証情報として myUser と myPassword を使用し、サーバーとの認証を行います。これにより、 secret.txt ファイルのダウンロードが開始します。

帯域幅制限の適用

cURLは、デフォルトでは利用可能な帯域幅をすべて使用してファイルのダウンロードを行いますが、これは必ずしも望ましい動作ではありません。ダウンロード速度を制御するには、 --limit-rate オプションの後に、設定希望で最大のダウンロード速度を指定します。

curl -O --limit-rate 5k "https://i.imgur.com/CSRiAeN.jpg"

出力は次のようになります。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   5166      0  0:00:06  0:00:06 --:--:--  5198

ダウンロード速度(5198バイト/秒、これは5KB/秒に相当)がオプションで指定された速度と一致していることにご留意ください。これは、マシンの通常のダウンロード速度が --limit-rateで設定された値より速い場合でも発生します。

--limit-rate は、帯域幅の使用量を制御してネットワークへの過負荷を回避したり、帯域幅制限を遵守したり、またテストのためにより遅いネットワーク状態をシミュレートしたりするのに役立ちます。

プロキシサーバー経由でのダウンロード

cURLを使用してダウンロードリクエストを実行すると、IPアドレスがターゲットサーバーに公開されます。プライバシーの維持や、 レート制限のようなアンチボット対策の回避を希望する場合、これは問題となります。

IPアドレスをマスクしてリクエストをプロキシ経由でルーティングするには、cURLコマンドで -x (または --proxy)オプションをご使用ください。

curl -x <proxy_url> -O <file_url>

<proxy_url> は次の形式で指定する必要があります。

[protocol://]host[:port]

プロキシURLは、HTTP、HTTPS、SOCKSプロキシーのどれを使用しているかによって異なることにご留意ください。詳細な手順については、 cURLプロキシ統合ガイドをご参照ください。

例として、HTTPプロキシを使用している場合、コマンドは次のようになります。

curl -x "http://proxy.example.com:8080" -O "https://i.imgur.com/CSRiAeN.jpg"

バックグラウンドダウンロードの実行

cURL download fileコマンドは、デフォルトでは失敗時にプログレスバーまたはエラーメッセージを表示します。これらの出力を無効にするには、 -s (または --silent)オプションを使用して「サイレント」モードまたは「クワイエット」モードを有効にすることができます。

curl -O -s "https://i.imgur.com/CSRiAeN.jpg"

これにより、cURLはサイレントモードで動作するようになります。ダウンロードが成功すると、ファイルは現在のディレクトリに表示されますが、ターミナルにはフィードバックは表示されません。

詳細な情報を表示

エラーが発生した場合や、cURLが裏でどのようなことを行っているのかをよりよく理解するためには、 -v (または --verbose)オプションを使用して詳細モードを有効にすることをお勧めします。

curl -O -v "https://i.imgur.com/CSRiAeN.jpg"

このコマンドを実行すると、リクエストとレスポンスのプロセス関連の詳細情報を含む追加の出力が表示されます。

* IPv6: (none)
* IPv4: 146.75.52.193
*   Trying 146.75.52.193:443...
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* ALPN: server accepted http/1.1
* Connected to i.imgur.com (146.75.52.193) port 443
* using HTTP/1.x
> GET /CSRiAeN.jpg HTTP/1.1
> Host: i.imgur.com
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
* schannel: failed to decrypt data, need more data
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 35354
< Content-Type: image/jpeg
< Last-Modified: Wed, 08 Jan 2025 08:02:49 GMT
< ETag: "117b93e0521ba1313429bad28b3befc8"
< x-amz-server-side-encryption: AES256
< X-Amz-Cf-Pop: IAD89-P1
< X-Amz-Cf-Id: wTQ20stgw0Ffl1BRmhRhFqpCXY_2hnBLbPXn9D8LgPwdjL96xarRVQ==
< cache-control: public, max-age=31536000
< Accept-Ranges: bytes
< Age: 2903
< Date: Wed, 08 Jan 2025 08:51:12 GMT
< X-Served-By: cache-iad-kiad7000028-IAD, cache-lin1730072-LIN
< X-Cache: Miss from cloudfront, HIT, HIT
< X-Cache-Hits: 1, 0
< X-Timer: S1736326272.410959,VS0,VE1
< Strict-Transport-Security: max-age=300
< Access-Control-Allow-Methods: GET, OPTIONS
< Access-Control-Allow-Origin: *
< Server: cat factory 1.0
< X-Content-Type-Options: nosniff
<
{ [1371 bytes data]
100 35354  100 35354    0     0   212k      0 --:--:-- --:--:-- --:--:--  214k
* Connection #0 to host i.imgur.com left intact

これには、接続の詳細やリクエストヘッダー、レスポンスヘッダー、その他のダウンロード進行状況情報が含まれます。

簡易プログレスバーを設定

標準のcURLダウンロードファイルプログレスバーは、ユーザーのニーズに合わない場合があります。 -# (または --progress-bar)オプションを使用すると、よりシンプルなプログレスバーを有効にすることができます。

curl -O -# "https://i.imgur.com/CSRiAeN.jpg"

これにより、 # 文字を使用したプログレスバーが表示されます。これは、ファイルがダウンロードされるにつれて徐々に増えていきます。

########################################################### 100.0%

 # バーでは、デフォルトのcURL進行状況出力と比較して、ダウンロードの進行状況がより簡素に表示されます。

cURLで複数のファイルをダウンロードする方法

ここまで、cURLを使用してファイルをダウンロードする方法を学びました。さて、1つのコマンドで複数のファイルをダウンロードする場合はどうでしょう。学ぶ準備はできましたか?

レンジファイルのダウンロード

cURLは、URL拡張を使用した複数ファイルの同時ダウンロードをサポートしています。具体的には、中括弧 {}を使用して指定することにより、同じリモートURLを持つ複数のファイルをダウンロードすることができます。

curl -O "https://example.com/images/{1.jpg,2.jpg,3.jpg}"

これにより、指定された3つのファイルをダウンロードすることができます。

1.jpg
2.jpg
3.jpg

 {} で指定されたファイルの拡張子が異なることが確認できます。

同様に、角括弧 [] 構文を使用することもできます。

curl -O "https://example.com/files/file[1-3].jpg"

これにより、最初の例と同じ結果が得られます。この場合、 [] のすべてのファイルは同じ拡張子を共有している必要があります。

:カスタムオプション(サイレントモードの場合は -s 、帯域幅制限の場合は --limit-rate など)を含めた場合、これはダウンロード中のすべてのファイルに適用されます。

複数ファイルのダウンロード

異なるURLから複数のファイルをダウンロードするには、 -O オプションを複数回指定する必要があります。

curl -O "https://i.imgur.com/CSRiAeN.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"

このコマンドは i.imgur.com から CSRiAeN.jpg をダウンロードし、 brightdata.comから upload_blog_20201220_153903.jpg をダウンロードします。

出力には、指定されたURLごとのダウンロードバーが含まれます。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   271k      0 --:--:-- --:--:-- --:--:--  276k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 22467    0 22467    0     0  34657      0 --:--:-- --:--:-- --:--:-- 34724

同様に、複数の -o オプションを使用することができます。

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg" -o "blog_post.svg"

上記のコマンドでは、 CSRiAeN.jpg がダウンロードされて logo.jpgとして保存され、 upload_blog_20201220_153903.svg はダウンロード後、 blog_post.svgとして保存されます。

また、 -O と -o オプションを混在させることもできます。

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"

これにより、前と同じように logo.jpg がダウンロードされ、 upload_blog_20201220_153903.svg は元のファイル名にてダウンロードされます。

 -vや -s 、 --limit-rate など他のオプションはすべてのURLに個別に適用されるため、一度指定する必要があることにご留意ください。

cURLを使用してファイルをダウンロードする際のベストプラクティス

以下は、cURLファイルダウンロードにおける最も重要なベストプラクティスのリストになります。

  • Windowsでは、curlの代わりに curl.exe を使用する:Windowsでは、 Invoke-WebRequest コマンドレットとの競合を避けるため、 curl ではなく curl.exe をご使用ください。
  • HTTPSおよびSSL/TLSエラーを無視する(注意が必要):SSL/TLS証明書検証エラーを無視するには、 -k (または --insecure)オプションをご使用ください。ただし、これによってセキュリティが危険にさらされる可能性があるため、信頼できる環境でのみ使用すべきであることにご留意ください。
  • 適切なHTTPメソッドを指定する:リクエストを行うときは、GETやPOST、PUTなど適切なHTTPメソッドをご使用ください。メソッドは、サーバーのリクエストへの応答方法に影響します。 -X オプションを使用してメソッドを指定してください。
  • URLを引用符で囲み、特殊文字はエスケープする:特殊文字が正しく処理されるよう、必ずURLを一重引用符または二重引用符で囲んでください。URL内のスペースやアンパサンド、その他特殊文字関連の問題を避けるには、エスケープ文字(\)をご使用ください。
  • 個人情報を保護するためのプロキシを指定する: -x (または --proxy)オプションを使用し、cURLリクエストをプロキシ経由でルーティングしてください。これにより、ファイルをスクレイピングまたはダウンロードする際にIPアドレスを保護し、プライバシーを維持することができます。
  • 異なるリクエスト間でCookieを保存して再利用する:後続のリクエストでクッキーを保存して再利用するには、 -c と -b のオプションをご利用ください。これは、セッションの永続性維持や、認証、追跡に役立ちます。
  • より良い制御のためにダウンロード速度を制限する: --limit-rate オプションを使用してダウンロード速度を制御し、ネットワーク接続への過負荷やサーバーのレート制限を防止してください。
  • デバッグ用の詳細出力を追加する:リクエストとレスポンスに関する詳細情報を取得するには、 -v オプションを使用し、詳細モードを有効にしてください。これはデバッグやトラブルシューティングに役立ちます。
  • エラーレスポンスを確認する:必ず -w オプションよりHTTPレスポンスコードを確認し、ファイルのダウンロードが成功したか(例: 200 OK)、またはエラー(例: 404 Not Found)が発生したかをご確認ください。

ファイルのダウンロード時におけるcURLとWgetの比較

cURLとWgetはどちらも、リモートサーバーからファイルを取得するためのコマンドラインツールです。これらの主な違いは次のとおりです。

  • Wgetは、ウェブからファイルをダウンロードするよう設計されています。HTTPやHTTPS、FTP、およびその他の多くのプロトコルをサポートしています。Wgetは、ファイルの再帰的なダウンロードや中断されたダウンロードの再開、バックグラウンドプロセスでの機能の高さにより知られています。 Pythonでウェブページをダウンロードする方法をご参照ください。
  • cURL は、さまざまなインターネットプロトコルでのサーバー間のデータ転送に使用される、多目的のコマンドラインツールです。これは通常、エンドポイントのテストやシンプルなHTTPリクエストの実行、単一ファイルのダウンロードなどに使用されます。また、cURLは Webスクレイピングにも使用することができます。

cURLとWgetの主な違いは、cURLではデータ転送をより細かく制御できることにあります。これは具体的には、カスタムヘッダーや認証、その他のプロトコルなどがサポートされていることを意味します。これとは対照的にWgetはシンプルで、一括ダウンロードや再帰、中断された転送の処理などに適しています。

まとめ

今回のガイドでは、cURLを使用してファイルをダウンロードする方法を学びました。基本的なcURLダウンロードファイルの構文から始め、より複雑なシナリオとユースケースを検討しました。これにより、cURLを使用して1つまたは複数のファイルをスクレイピングする方法がお分かりいただけたと思います。

また、HTTPリクエストを行うことにより、インターネット上に痕跡が残ることにご留意ください。身元やプライバシーを保護し、セキュリティを強化するには、プロキシとcURLの統合をご検討ください。幸いなことに、Bright Dataがこの問題を解決することができます!

Bright Dataは、世界最高水準のプロキシサーバーを管理しており、フォーチュン500企業を含む2万以上のお客様にサービスを提供しています。その世界規模のプロキシネットワークには、次の内容が含まれます。

総合的に見て、Bright Dataはプロキシ業界で最大かつ最も信頼性の高いスクレイピング用プロキシネットワークの1つであると言えるでしょう。

今すぐ登録し、当社のプロキシとスクレイピングソリューションを無料でテストしてみましょう!

クレジットカードは必要ありません