公開日:2020/06/10更新日:2020/08/03
【Kotlin】HttpURLConnectionでRangeリクエストをする方法

- HttpURLConnectionで任意の場所のデータを取得したい。
- 中断されたダウンロードを再開させる処理が実装したい。
HTTP通信で特定の範囲のデータを取得したり、中断されたダウンロードを、任意の場所から再開するなどの処理は、Rangeリクエストが必要となります。
本記事では、HttpURLConnectionクラスを使用したRangeリクエストの方法を解説致します。
目次
HttpURLConnectionについて
HttpURLConnectionは、サーバーとHTTP通信をするための機能を提供するクラスです。
参考:HttpURLConnection | Android Developers
HttpURLConnectionの基本的な使い方につきましては、以下記事をご覧ください。
また、HTTP通信の動作確認には、サーバーが必要となります。ローカルにサーバーを立ち上げる方法につきましては、以下記事をご覧ください。
Rangeリクエストの実装
HttpURLCoonnectionでRangeリクエストをするには、setRequestProperty(String key, String value)関数を使用します。
第1引数にはリクエストのキーを、第2引数には値を指定します。Rangeリクエストの場合、keyには”Range”、valueには”bytes=0-10”というように、リクエストする範囲を指定します。
では、実装例です。
10行目のhttpURLConnection.setRequestProperty(“Range”, “bytes=25-40”)という部分でRangeリクエストの設定をしています。
今回のサンプルでは、”bytes=25-40″と指定しておりますので、25番目から40番目までの、26byteのデータの取得を行います。もし、「40番目から最後まで」としたい場合は、”bytes=40-“と指定します。
Rangeリクエストの実装で注意していただきたいのが、httpURLConnection.responseCodeです。通常のHTTPリクエストでは、connectがうまくいくと、HttpURLConnection.HTTP_OK(200)が返ってきます。
しかし、Rangeリクエストの場合は、HttpURLConnection.HTTP_PARTIAL(206)がresponseCodeが返ってきます。HTTP_OKではないですが、エラーではないということを覚えておきましょう。