Does anyone know of how to request byte ranges along with an HTTP request? I am looking to facilitate the resuming of downloads in our application by requesting a byte range of where the download left off and reading its InputStream from getContent().
I tried iterating over the headers but they are null. Source is below.
import java.io.IOException;
import java.io.InputStream;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.util.Log;
/**
 * @author Kevin Kowalewski
 *
 */
public class DownloadClient {
DefaultHttpClient httpClient;
HttpGet httpGet;
HttpResponse httpResponse;
HttpEntity httpEntity;
InputStream httpInputStream;
private static String LOG_TAG = DownloadClient.class.getName();
public DownloadClient(){
    httpClient = new DefaultHttpClient();
    httpGet = new HttpGet("http://cachefly.cachefly.net/100mb.test");
    for (Header header : httpGet.getAllHeaders()){
        Log.d(LOG_TAG, "--> Header: " + header);
    }
    Log.d(LOG_TAG, "--> Header size is: " + httpGet.getAllHeaders().length);
    try {
        httpResponse = httpClient.execute(httpGet);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    httpEntity = httpResponse.getEntity();
    try {
        httpInputStream = httpEntity.getContent();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Log.d(LOG_TAG, "--> StatusLine: " + httpResponse.getStatusLine());
}
public void read(){
    byte[] readBuffer = new byte[32];
    try {
        while (httpInputStream.read(readBuffer) != -1){
            try{Thread.sleep(100);}catch(Exception e){}
            //Log.d(LOG_TAG,"--> Read Bytes: " + new String(readBuffer));
        };
    } catch (IOException e) {
        e.printStackTrace();
    }
}
public void shutdown(){
    httpGet.abort();
    httpClient.getConnectionManager().shutdown();
}
}
Kevin
From Apache HTTP Client API version 4.3 on wards, DefaultHttpClient is deprecated.
The Content-Range response HTTP header indicates where in a full body message a partial message belongs.
Byte-range requests occur when a client asks the server for only a portion of the requested file. The purpose of this is essentially to conserve bandwidth usage by avoiding the need to download a complete file when all that is required is a small section.
I was able to get this working by adding the following line:
httpGet.addHeader("Range", "bytes=0-0");
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With