我编写了一个应该像Web代理一样运行的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");
答案 0 :(得分:0)
因为您正在做的只是阅读Html响应,但您实际上并没有调用HTML中引用的其他资源,如图像,js等。
当您监控浏览器如何通过Firebug for Firefox呈现html时,您可以观察到。
1)浏览器收到Html响应。
2)然后它解析引用的资源,并为每个资源进行单独的Get调用。
因此,为了使代理工作,您需要模仿此浏览器行为。
我的建议是使用已经可用的开源库HTML Unit