curl

cURLでHTTPコンテンツを部分的にダウンロードする

More than 1 year has passed since last update.


経緯

巨大なファイルの形式チェックをするために、先頭から一定のバイト数だけダウンロードして確認したくなった。


cURLで部分ダウンロードする

cURLのオプションに以下があるのでそれを活用して部分ダウンロードできます。

 -r, --range RANGE   Retrieve only the bytes within a range

例:先頭バイト(0バイト目)から255バイト目までをダウンロードする

$ curl -r 0-255 "http://yourhost.com/huge_content.html"

こちらの形式は当然ながらRangeヘッダーに対応しているWebサーバー/コンテンツのみ有効です。

たとえばPHPなどで記述されているWebページの場合など、Rangeヘッダーを正しく送信しても206レスポンスを返さないケースもありますので注意が必要です。


Rangeヘッダーと応答レスポンスのサンプル

$ curl -v -r 0-100 "http://yourhost.com/huge_contet.html"

* 送信したヘッダ *
> GET /huge_content.html HTTP/1.1
> Range: bytes=0-100
> User-Agent: curl/7.35.0
> Host: yourhost.com
> Accept: */*
>

* 受信したヘッダ *
< HTTP/1.1 206 Partial Content
< Date: Wed, 18 Oct 2017 09:35:45 GMT
< Server: Apache
< Last-Modified: Tue, 17 Oct 2017 12:28:30 GMT
< Accept-Ranges: bytes
< Content-Length: 101
< Content-Range: bytes 0-100/1234567890
< Connection: close
< Content-Type: text/html