Abgesehen von der maximalen Umleitungen, und wie kann die maximale Downloadgröße einer URL für einen Httpclient angegeben werden?
Antworten
Zu viele Anzeigen?AFAIK gibt es keinen HTTP-Header, der dem Server die maximale Antwortgröße mitteilt. Sie können die Content-Length
der Antwort und kehrt sofort zurück, wenn sie zu groß ist. Wenn sie nicht angegeben ist (sie kann sogar auf der Serverseite unbekannt sein), haben Sie nur die Möglichkeit, das Herunterladen zu starten. Keine Sorge: Wenn Sie HttpClient.execute().getEntity()
den Inhalt wird nirgendwo vollständig heruntergeladen . Eine HttpEntity
kann gestreamt und gepuffert werden, was bedeutet, dass es nicht vollständig im Speicher gehalten oder auf der Festplatte gespeichert wird, sobald Sie die execute()
So habe ich das Problem gelöst, wie in Jarrods Antwort beschrieben:
HttpGet request = new HttpGet();
request.setURI(new URI(url));
response = client.execute(request);
BufferedReader in;
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
char buffer[] = new char[1024];
int totalReadSize = 0, currentRead=0;
while ((currentRead = in.read(buffer,0,buffer.length)) != -1)
{
totalReadSize += currentRead;
line = new String(buffer);
sb.append(line);
if (totalReadSize > MAX_DOWNLOAD_SIZE)
{
client.getConnectionManager().shutdown();
throw new Exception("File too large");
}
}