Skip to content

About

cURL を使用したファイルのダウンロードに関するガイド(構文、高度なオプション、ベストプラクティス、Wget との比較を含みます)。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

ファイルをダウンロードするためのcURLガイド

Promo

このガイドでは、以下の内容をご紹介します。

それでは始めましょう!


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

以下が最も基本的な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 という名前のファイルが作成されます。

The downloaded CSRiAeN.jpg file in the folder where cURL was launched

cURLとそのオプションに関する詳細は、cURLガイドをご覧ください。

cURLでファイルをダウンロードする: 高度なオプション

追加のオプションをいくつか学びましょう。

ダウンロードしたファイル名を変更する

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

The default curl_response file in the folder where cURL was launched

また、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 になります。

The downloaded logo.jpg file in the folder where cURL was launched

リダイレクトに追従する

一部の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%

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

範囲指定によるファイルダウンロード

同じリモート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でファイルをダウンロードする際のベストプラクティス

以下は、cURLでファイルをダウンロードする際に特に重要なベストプラクティスの一覧です。

  • Windowsでは curl ではなく curl.exe を使用することで、Invoke-WebRequest cmdletとの競合を回避します。
  • HTTPSおよびSSL/TLSエラーを無視するには、-k(または --insecure)オプションを使用します。
  • 適切なHTTPメソッドを指定する: -X オプションでGET、POST、PUTを指定します。
  • URLを引用符で囲み、特殊文字を \ でエスケープすることで、スペースやアンパサンドなどに起因する問題を回避します。
  • プロキシを指定して身元を保護する: -x(または --proxy)オプションを使用します。
  • 異なるリクエスト間でCookieを保存および再利用する: それぞれ -c と -b オプションを使用します。
  • ダウンロード速度を制限して制御性を高める: --limit-rate オプションを使用します。
  • デバッグのためにverbose出力を追加する: -v オプションを使用します。
  • エラーレスポンスを確認する: -w オプションを使用してHTTPレスポンスコードを常に確認します。

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

  • cURL はデータ転送に対してより細かな制御が可能で、カスタムヘッダー、認証、より多くのプロトコルに対応しています。
  • Wget はよりシンプルで、一括ダウンロード、再帰、転送中断時の処理に適しています。

結論

HTTPリクエストを行うたびに、インターネット上に痕跡が残ります。身元とプライバシーを保護し、セキュリティを強化するために、cURLにプロキシを統合することをご検討ください。

Sign up now して、当社のプロキシおよびスクレイピングソリューションを無料でお試しください!

About

cURL を使用したファイルのダウンロードに関するガイド(構文、高度なオプション、ベストプラクティス、Wget との比較を含みます)。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors