让我通过一个场景来解释这个问题:
1)用户访问我的页面“www.proxy4html.com”,填写表格:
web-address: |www.google.co.in |
2) 点击提交。
3) 在浏览器地址栏中获取带有“www.proxy4html.com”的谷歌主页。
现在要从网络上获取内容,我正在使用java.net.HttpURLConnection(尽管为了解决这个问题,我也尝试了其他几个选项)。如果代码独立运行,它会按预期工作
(即在通过公共静态无效主(字符串..)..线程运行时,它获取给定网址上的任何html)。
但是在Servlet环境下运行时同样会抛出
java.net.ConnectException:连接超时:连接
这是代码:
public void write(String urlString, PrintWriter writer) {
URL url;
try {
url = new URL(urlString);
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
HttpURLConnection.setFollowRedirects(false);
huc.setConnectTimeout(15 * 1000 * 60);
huc.setReadTimeout(15 * 1000 * 60);
huc.setRequestMethod("GET");
huc.connect();
InputStream input = url.openStream();
logger.info("got input stream");//I never reach here in servlet env :(
int i = 0;
while((i = input.read()) != -1) {
writer.write(i);
System.out.print((char)i);
}
input.close();
} catch (ConnectException e) {
logger.log(Level.SEVERE, "", e);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
给出的代码示例可能看起来不干净,但需要注意的是,当从传递正确URL(以及任何输出流)的Servlet 调用上述方法时,永远不会建立连接。
我在我的本地机器上运行所有这些,它在某个公司网络中的本地机器上(你可能不想得到关于防火墙的任何结论,因为相同的代码在 psvmain 下运行)。
请帮忙....
提前致谢。
编辑:我在家里尝试了一些相同的东西,它按预期工作得很好。我想这个问题更多地属于操作系统领域而不是java。所以我想再次改写我的问题:
- 操作系统(Window 7)是否以某种方式阻止tomcat发出Http请求?
- 他们在 Window 7 下是否有任何配置不允许应用程序发出浏览器以外的 Http 请求?
- 我曾多次看到Mozilla Firefox(我是从一个复制而不是安装的目录运行的,即可能没有管理员权限并且没有窗口注册表)永远无法对其自身进行定期更新。