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);
        }
     }

只有 30-40% 的 HTML 内容被下载和显示。我无法获得完整的内容。

我尝试增加 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 回答