开发者社区> 问答> 正文

HttpURLConnection 访问网页异常?报错

最近学习模仿浏览器访问网页。按照网上的代码试验了一下,同样的代码在公司会报  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)

展开
收起
爱吃鱼的程序员 2020-06-22 18:24:47 710 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你公司上网是不是要设置代理?如果是要在代码里面设置代理。

    也许模拟的不够真实 被人家服务器端认出来了吧


    <preclass="brush:java;toolbar:true;auto-links:false;">connection.setRequestProperty("User-Agent","Mozilla/4.0(compatible;MSIE5.0;WindowsNT;DigExt)"); 加上这句试试。

    实在不行,参考下这个网址上的所有配置:

    <arel="nofollow">http://blog.csdn.net/bluesky8640/article/details/8070101

    <divclass="ref">

    引用来自“黎明伟”的答案

    <divclass=ref_body>

    也许模拟的不够真实 被人家服务器端认出来了吧


    看样子是网络问题,我用代码在这边公司测试没问题

    首先感谢大家帮助。

    大致了解确实因为防火墙的问题,设置代理就没问题了。但是有几个问题,首先我们的防火墙的是forefronttmg,如果禁用的话我的c#程序和IE就得设置代理,如果启用那么c#和IE不用设置代理也能上网;但是java程序不管启用与否都得设置代理服务器。我这里就想不通了。而且我是写公用接口给外边用的,那么肯定不能在程序里面把代理写死了,所以测试的时候就麻烦了。

    我先设置代理把程序写完,以后再研究吧。再次谢谢大家。

    恩我怎么看C#代码和Java那么一样啊有啥不一样的嘛?

    我也遇到同样的问题,请问您最后怎么解决的,我现在通过java调也出现同样的问题,急。。。。

    2020-06-23 11:53:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载