このガイドでは、以下の内容をご紹介します。
- 基本的なcURLのファイルダウンロード構文
- cURLでファイルをダウンロードする際に、より複雑なシナリオへ対応する方法
- 複数のファイルを一度にダウンロードする方法
- cURLを効果的に使うためのベストプラクティス
- cURLとWgetの簡単な比較
それでは始めましょう!
以下が最も基本的なcURLのファイルダウンロード構文です。
curl -O <file_url>💡 重要: Windowsでは、
curlはWindows PowerShellにおけるInvoke-WebRequestのエイリアスです。競合を回避するために、curlをcurl.exeに置き換えてください。
-O および --remote-name フラグは、ダウンロードしたファイルを元の名前で保存するようcURLに指示します。
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とそのオプションに関する詳細は、cURLガイドをご覧ください。
追加のオプションをいくつか学びましょう。
デフォルトでは、-O オプションはダウンロードしたファイルを元の名前で保存します。URL内のリモートファイルに名前が含まれていない場合、cURLは拡張子のない curl_response というファイルを作成します。
また、cURLはその挙動を知らせるために警告も出力します。
Warning: No remote file name, uses "curl_response"
ダウンロードするファイルに任意の名前を付けるには、-o(または --output)フラグを使用します。
curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg"cURLは指定されたファイルURLに対してGETリクエストを実行し、ダウンロードした内容を -o の後に指定した名前で保存します。この場合、出力ファイルは logo.jpg になります。
一部のURLは目的のファイルを直接指しておらず、最終的な宛先へ到達するために自動リダイレクトが必要です。
cURLにリダイレクトへ追従するよう指示するには、-L オプションを使用します。
curl -O -L "<file_url>"そうしない場合、cURLはリダイレクトのレスポンスヘッダーを出力し、Location ヘッダーで提供される新しい場所へは移動しません。
サーバーによってはアクセスが制限されており、ユーザー認証が必要です。基本HTTP認証またはFTP認証を行うには、-u(または --user)オプションを使用し、次の形式でユーザー名とパスワードを指定します。
<username>:<password>この形式ではユーザー名にコロンを含めることはできません。ただし、パスワードにはコロンを含められます。
<password> 文字列は省略可能です。ユーザー名のみを指定した場合、cURLはパスワードの入力を促します。
サーバー認証を使ってcURLでファイルをダウンロードする構文は次のとおりです。
curl -O -u <username>:<password> <file_url>たとえば、認証付きURLからファイルをダウンロードするには次のコマンドを使用できます。
curl -O -u "myUser:myPassword" "https://example.com/secret.txt"利用可能な帯域幅を使い切らないようにするには、--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
--limit-rate オプションは、ネットワークの過負荷を防いだり、帯域幅制限に準拠したり、テスト目的で低速なネットワーク状態をシミュレートしたりするために、帯域幅の使用量を制御するのに役立ちます。
プライバシーを維持したり、レート制限のようなアンチボット対策 を回避したりするために、IPアドレスをマスクし、-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"出力の進捗バーおよびエラーメッセージを無効にするには、-s(または --silent)オプションで「quiet」モードを有効にします。
curl -O -s "https://i.imgur.com/CSRiAeN.jpg"ダウンロードが成功すると、ターミナルにフィードバックが表示されないまま、ファイルがカレントディレクトリに作成されます。
エラーが発生した場合、またはcURLが内部的に何をしているかをよりよく理解したい場合は、-v(または --verbose)オプションを付けて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.
-#(または --progress-bar)オプションを使用すると、よりシンプルな進捗バーを有効にできます。
curl -O -# "https://i.imgur.com/CSRiAeN.jpg"これにより、# 文字を使った進捗バーが表示され、ファイルのダウンロードに伴って段階的に埋まっていきます。
########################################################### 100.0%
同じリモート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"Note:
すべてのカスタムオプション(例: サイレントモードの-sや帯域幅制限の--limit-rate)は、ダウンロード対象のすべてのファイルに適用されます。
異なるURLからファイルをダウンロードするには、-O オプションを複数回指定する必要があります。
curl -O "https://i.imgur.com/CSRiAeN.jpg" -O "https://brightdata.jp/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"出力には、指定した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.jp/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg" -o "blog_post.svg"-O と -o オプションを組み合わせることもできます。
curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" -O "https://brightdata.jp/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"Note:
-v、-s、--limit-rateなどの他のオプションはすべてのURLに適用されるため、1回だけ指定すれば十分です。
以下は、cURLでファイルをダウンロードする際に特に重要なベストプラクティスの一覧です。
- Windowsでは curl ではなく
curl.exeを使用することで、Invoke-WebRequestcmdletとの競合を回避します。 - HTTPSおよびSSL/TLSエラーを無視するには、
-k(または--insecure)オプションを使用します。 - 適切なHTTPメソッドを指定する:
-XオプションでGET、POST、PUTを指定します。 - URLを引用符で囲み、特殊文字を
\でエスケープすることで、スペースやアンパサンドなどに起因する問題を回避します。 - プロキシを指定して身元を保護する:
-x(または--proxy)オプションを使用します。 - 異なるリクエスト間でCookieを保存および再利用する: それぞれ
-cと-bオプションを使用します。 - ダウンロード速度を制限して制御性を高める:
--limit-rateオプションを使用します。 - デバッグのためにverbose出力を追加する:
-vオプションを使用します。 - エラーレスポンスを確認する:
-wオプションを使用してHTTPレスポンスコードを常に確認します。
- cURL はデータ転送に対してより細かな制御が可能で、カスタムヘッダー、認証、より多くのプロトコルに対応しています。
- Wget はよりシンプルで、一括ダウンロード、再帰、転送中断時の処理に適しています。
HTTPリクエストを行うたびに、インターネット上に痕跡が残ります。身元とプライバシーを保護し、セキュリティを強化するために、cURLにプロキシを統合することをご検討ください。
- Datacenter proxies – 770,000以上のデータセンターIP。
- Residential proxies – 195か国以上で72M以上のレジデンシャルIP。
- ISP proxies – 700,000以上のISP IP。
- Mobile proxies – 7M以上のモバイルIP。
Sign up now して、当社のプロキシおよびスクレイピングソリューションを無料でお試しください!



