1

我写了一个 Servlet,它应该像一个网络代理。但是当我加载页面时,一些 Javascript GET 调用仅返回部分原始内容,例如localhost:8080/Proxy?requestURL=example.com.

将 java 脚本的内容打印到控制台时,它们是完整的。但是浏览器的响应被截断了。

我是这样写的:

ServletOutputStream sos = resp.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(sos);
..
String str = content_of_get_request
..
writer.write(str);
writer.flush();
writer.close();

奇怪的是,当我直接请求页面请求期间加载的 Javascript 时,如下所示:

localhost:8080/Proxy?requestURL=anotherexaple.com/needed.js

整个内容返回给浏览器。

如果有人有想法,那就太好了。问候

更新:

问题是我创建响应字符串的方式:

while ((line = rd.readLine()) != null)
{
    response.append(line);
}

我从 Stream 中读取了一行并将其附加到 StringBuffer 上,但似乎 firefox 和 chrome 对此有问题。似乎某些浏览器为 JavaScript 实现了最大行长,但是 RFC HTTP 1.1 标准中没有提到最大行长。

使固定:

只需在该行中添加“\n”即可解决问题。

response.append(line+"\n");
4

1 回答 1

0

因为您所做的只是读取 Html Response ,但实际上并没有调用 HTML 中引用的其他资源,例如图像、js 等。

当您通过 Firebug for Firefox 监视浏览器如何呈现 html 时,您可以观察到这一点。

1) 浏览器收到 Html 响应。

2)然后它解析引用的资源并为每个资源进行单独的 Get 调用。

因此,为了让代理工作,您需要模仿这种浏览器行为。

我的建议是使用已经可用的开源库 HTML 单元

于 2013-03-08T09:29:50.400 回答