0

问题:如果页面在使用字符串时有图像,则将 http 消息的响应写回客户端(Web 浏览器)不会返回完整页面,所以我决定使用字节,但我仍然有同样的问题。我已经能够从请求中获取标头作为字符串并将其刷新到客户端,但我不确定如何处理该消息以确保它正确显示在 Web 浏览器上。

        //This portion takes the message from the Httpurl connection inputstream
        //the header has already been exttracted
        //uc here represents a httpurlconnection
       byte[] data = new byte[uc.getContentLength()];
        int bytesRead = 0;
        int offset = 0;
        InputStream in = new BufferedInputStream(uc.getInputStream());
        while (offset < uc.getContentLength()) {
        bytesRead =in.read(data, offset, data.length-offset);
        if (bytesRead == -1) break;
        offset += bytesRead;
4

2 回答 2

0

我建议您在阅读时将字节写入响应,并使用小缓冲区,这样您的服务器就不会受到大内存使用的影响。将所有字节加载到服务器内存中的数组中并不是一个好习惯。

这是一个快速示例:

response.setContentType("text/html;charset=UTF-8");
    OutputStream out = response.getOutputStream();
    HttpURLConnection uc;

// Setup the HTTP connection...

InputStream in = uc.getInputStream();
byte[] b = new byte[1024];
int bytesRead = 0;
while ( bytesRead != -1 ) {
    bytesRead = in.read(b);
    out.write(b);;
}

// Close the streams...
于 2013-02-14T23:32:53.577 回答
0

您似乎正在使用图像代理 HTML 页面,并且您似乎期望 HTML 页面中的图像以某种方式自动内联在 HTML 源代码中。因此这是绝对不正确的。HTML 中的图像由具有指向 Web 浏览器必须单独调用和下载的 URL<img>的属性的元素表示。src完全相同的故事也适用于 CSS 和 JS 文件等其他资源。

您基本上需要解析获得的 HTML,扫描所有<img src>(必要时还扫描)元素<link href>并将<script src>它们的 URL 更改为您的代理的 URL,以便它可以单独提供所需的图像(和 CSS/JS)资源。

您可以在此答案中找到一个相关问题的启动示例:Make HttpURLConnection load web pages with images

于 2013-02-15T00:04:18.157 回答