Ich verwende htmlunit
mit httpclient
. Wie kann ich die response body length
vonauf 1MB
beschränken?Wie HttpClient Antwortlänge zu begrenzen
3
A
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.
Verwandte Themen
- 1. Wie "HttpClient" zu Eclipse zu importieren?
- 2. Ermitteln der Antwortlänge von einem ISAPI-Filter
- 3. Wie konfiguriere ich httpClient zu jsoup
- 4. coderigniter datenbank wie die ausgabe zu begrenzen
- 5. Wie die Größe des Heap zu begrenzen?
- 6. Wie Log-Dateigröße in Python zu begrenzen
- 7. Wie Zeilen in PostgreSQL zu begrenzen SELECT
- 8. Wie Pfanne in orbitcontrols zu begrenzen, Three.js
- 9. Wie Linien auf einem TextView zu begrenzen
- 10. Wie Jenkins Kind Prozesse zu begrenzen?
- 11. für in, wie die Ausgabe zu begrenzen?
- 12. Wie Mongo-Abfrage in Python zu begrenzen
- 13. Benutzerdefinierter Header zu Httpclient-Anforderung
- 14. HttpClient Anfrage wie Browser
- 15. Regex begrenzen Ziffern zu wiederholen
- 16. wie uitextfield Zeichenbereich bis zu 10 Ziffern zu begrenzen
- 17. Begrenzen oder begrenzen Sie read_very_eager() in Python
- 18. Mongoose Populate Optionen begrenzen, wie die Anzahl der Unterdokumente zu begrenzen?
- 19. Wie posten Daten mit HttpClient?
- 20. HttpClient Umleiten
- 21. HTTP-Response-Code, Reaktionszeit, Antwortlänge in Node.js/Express Konsolenausgabe fehlt
- 22. android httpclient
- 23. Parsing nicht konsistent json Antwortlänge in Excel VBA
- 24. Solr - wie "gruppieren" und "begrenzen"?
- 25. HttpClient - Hinzufügen von Parametern zu Get-Anforderung
- 26. Httpclient PutAsync keinen Parameter zu api
- 27. HttpClient NoClassDefFoundError
- 28. Speicherverbrauch begrenzen?
- 29. Android: HTTPClient
- 30. Slick 3.0.1 Begrenzen Verbindungen zu db
Können Sie erweitern, was Sie erreichen möchten? Warum nur 1 MB? –