2011-09-09 29 views
9

有誰知道如何請求字節範圍以及HTTP請求?我正在尋求通過請求一個字節範圍的下載位置並從getContent()中讀取它的InputStream來促進我們的應用程序中的下載恢復。Apache HttpClient獲取添加一個字節範圍頭?

我試着迭代頭部,但它們都是空的。來源如下。

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(); 
} 

}

凱文

回答

12

我能夠通過添加以下行來得到這個工作:

httpGet.addHeader("Range", "bytes=0-0");