2

最大リダイレクトとは別に、URL の最大ダウンロード サイズを Httpclient に指定するにはどうすればよいですか?

4

3 に答える 3

2

私の知る限り、サーバーに最大応答サイズを伝える HTTP ヘッダーはありません。応答の を確認して、Content-Length大きすぎる場合はすぐに返すことができます。指定されていない場合 (サーバー側では不明であっても指定できます)、唯一のオプションはダウンロードを開始することです。心配しないでください: を呼び出しHttpClient.execute().getEntity()ても、コンテンツはどこにも完全にダウンロードされません。はストリーミングおよびバッファリングできます。HttpEntityつまり、呼び出してすぐに完全にメモリに保持されたり、ディスクに保存されたりするわけではありません。execute()

ソースを自分で調べることができます

于 2012-04-11T12:47:00.133 に答える
1

ジャロッドの答えによると、これが私が問題を解決した方法です:

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 に答える
1

戻らない場合Content-Lengthは任意です。リソースをストリームとしてダウンロードし、手動でダウンロードしたバイト数を追跡​​する必要があります。これが HTTP の仕組みです。

于 2012-04-11T12:52:03.153 に答える