0

次のコードを使用して、サイズ 51kb の屋外 HTML コンテンツをダウンロードしています

    HttpGet httpget = new HttpGet(url);
    System.out.println("executing request" + httpget.getRequestLine());
    HttpResponse response = httpclient.execute(httpget);
    HttpEntity entity = response.getEntity();
    System.out.println("----------------------------------------");
    System.out.println(response.getStatusLine());
    System.out.println("----------------------------------------");
    if (entity != null) {
        System.out.println("Response content type: " + entity.getContentType());
        long contentLength = entity.getContentLength();
        System.out.println("Response content length: "+ entity.getContentLength());
        if (contentLength > 0) {
            b = new byte[(int) contentLength];
            entity.getContent().read(b);
            content=new String(b);
            content=content.replace("\n", "").replace("\r", "");
            //content = StringEscapeUtils.escapeHtml(content);
            System.out.println("Response content: " + content);
        }
     }

HTML コンテンツの 30 ~ 40 % のみがダウンロードされて表示されます。完全なコンテンツを取得できません。

bのバイトサイズを大きくしてみました。しかし、私には何もうまくいきませんでした。

Java コードを使用して屋外コンテンツをダウンロードするのを手伝ってください。どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

2

InputStream を読み取っても、常にコンテンツ全体が返されるとは限りません。ループ内から読み取りInputStream、バッファの正しいオフセットに書き込み、 の戻り値に基づいてオフセットをインクリメントする必要がありますread()。例えば:

byte[] b = new byte[(int)contentLength];
int offset = 0;
while(offset < contentLength) {
    offset += inputStream.read(b, offset, b.length - offset);
}
String content = new String(b); // Or specify encoding.

または、Apache Commons IO などのライブラリを使用できます。それは次のとおりです。

IOUtils.toString(entity.getContent(), encoding);
于 2013-01-07T13:39:50.003 に答える