2012-04-01 10 views

Antwort

2

Der Trick ist einfach. Sie müssen den InputStream nehmen, davon lesen und aufhören zu lesen, wenn das Limit überschritten wird.

 InputStream instream = method.getResponseBodyAsStream(); 

Ich habe ein Beispiel Tuning der Apache Beispiel ein wenig getan.

import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; 
import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpException; 
import org.apache.commons.httpclient.HttpStatus; 
import org.apache.commons.httpclient.methods.GetMethod; 
import org.apache.commons.httpclient.params.HttpMethodParams; 
public class HttpClientTutorial { 

    private static String url = "http://www.apache.com"; 
    private static final int LIMIT = 1024*1024;//set to 1MB 
    public static void main(String[] args) { 
    // Create an instance of HttpClient. 
    HttpClient client = new HttpClient(); 
    // Create a method instance. 
    GetMethod method = new GetMethod(url); 
    // Provide custom retry handler is necessary 
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
      new DefaultHttpMethodRetryHandler(3, false)); 
    try { 
     // Execute the method. 
     int statusCode = client.executeMethod(method); 
     if (statusCode != HttpStatus.SC_OK) { 
     System.err.println("Method failed: " + method.getStatusLine()); 
     } 
     // Read the response body. 
     //byte[] responseBody = method.getResponseBody(); 
     byte[] responseBody = null;  
     InputStream instream = method.getResponseBodyAsStream(); 
     if (instream != null) { 
      long contentLength = method.getResponseContentLength(); 
      if (contentLength < Integer.MAX_VALUE) { //guard below cast from overflow 
       ByteArrayOutputStream outstream = new ByteArrayOutputStream(); 
       byte[] buffer = new byte[1024]; 
       int len; 
       int total = 0; 
       while ((len = instream.read(buffer)) > 0 && total<LIMIT) { 
        outstream.write(buffer, 0, len); 
        total+= len; 
       } 
       responseBody = outstream.toByteArray(); 
       outstream.close(); 
       instream.close(); 
       System.out.println(new String(responseBody)); 
      } 
     } 
    } catch (HttpException e) { 
     System.err.println("Fatal protocol violation: " + e.getMessage()); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     System.err.println("Fatal transport error: " + e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     // Release the connection. 
     method.releaseConnection(); 
    } 
    } 
} 

Ich hoffe, das hilft.

0

Sie könnten BoundedInputStream von Apache Commons verwenden. Dies ist ein Stream, der nur Bytes bis zu einer bestimmten Länge liefert - wenn seine Position darüber hinausgeht, wird er gestoppt.