将Httpurl连接的响应正确地返回到Web浏览器

时间:2013-02-14 23:05:52

标签: java http proxy

问题:如果页面在使用字符串时有图像,那么将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;

2 个答案:

答案 0 :(得分: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...

答案 1 :(得分:0)

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

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

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