最近学习模仿浏览器访问网页。按照网上的代码试验了一下,同样的代码在公司会报 Connection timed out: connect的错误,但是在家里就能正常运行,以为是代理的问题,但是发现IE并没有设置代理,并且我用c#基本上相似的代码写出的程序是可以访问的,所以就很郁闷。以下是代码:
public static void main(String[] args) throws Exception { String uRL = "http://www.baidu.com/"; HttpURLConnection connection = (HttpURLConnection)new URL(uRL).openConnection(); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); connection.setRequestMethod("GET"); connection.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); String lines; while ((lines = reader.readLine()) != null) { System.out.println(lines); } reader.close(); connection.disconnect(); }以下是测试结果:
公司:浏览器访问正常,c#版的访问正常,java版的在connection.getInputStream()处会等待很长时间然后报错异常,并且用fiddle跟发现根本就没有发送请求。
家里面:同样的java代码时刻一运行的。
希望大神们能够指出我的错误,谢谢了。
异常代码
Exception in thread "main" java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at sun.net.NetworkClient.doConnect(NetworkClient.java:180) at sun.net.www.http.HttpClient.openServer(HttpClient.java:388) at sun.net.www.http.HttpClient.openServer(HttpClient.java:483) at sun.net.www.http.HttpClient.<init>(HttpClient.java:213) at sun.net.www.http.HttpClient.New(HttpClient.java:300) at sun.net.www.http.HttpClient.New(HttpClient.java:316) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:992) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:971) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:846) at vjia.open.Main.main(Main.java:29)
你公司上网是不是要设置代理?如果是要在代码里面设置代理。
也许模拟的不够真实 被人家服务器端认出来了吧
实在不行,参考下这个网址上的所有配置:
<arel="nofollow">http://blog.csdn.net/bluesky8640/article/details/8070101
<divclass="ref">也许模拟的不够真实 被人家服务器端认出来了吧
首先感谢大家帮助。
大致了解确实因为防火墙的问题,设置代理就没问题了。但是有几个问题,首先我们的防火墙的是forefronttmg,如果禁用的话我的c#程序和IE就得设置代理,如果启用那么c#和IE不用设置代理也能上网;但是java程序不管启用与否都得设置代理服务器。我这里就想不通了。而且我是写公用接口给外边用的,那么肯定不能在程序里面把代理写死了,所以测试的时候就麻烦了。
我先设置代理把程序写完,以后再研究吧。再次谢谢大家。
恩我怎么看C#代码和Java那么一样啊有啥不一样的嘛?我也遇到同样的问题,请问您最后怎么解决的,我现在通过java调也出现同样的问题,急。。。。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。