2

除了最大重定向之外,如何为 Httpclient 指定 URL 的最大下载大小?

4

3 回答 3

2

AFAIK 没有 HTTP 标头告诉服务器最大响应大小。您可以检查Content-Length响应的大小,如果它太大,则立即返回。如果没有指定(它甚至可以在服务器端未知),您唯一的选择就是开始下载它。别担心:当你调用HttpClient.execute().getEntity()的内容并没有完全下载到任何地方。AnHttpEntity可以流式传输和缓冲,这意味着它不会完全保存在内存中或在您调用时立即保存在磁盘上execute()

您可以自己探索资源

于 2012-04-11T12:47:00.133 回答
1

如果你不Content-Length回来,它是可选的;您必须以流的形式下载资源并跟踪您自己手动下载了多少字节。这正是 HTTP 的工作方式。

于 2012-04-11T12:52:03.153 回答
1

根据 Jarrod 的回答,这就是我最终解决问题的方式:

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");
    }
}
于 2012-04-12T08:54:19.047 回答