zoukankan      html  css  js  c++  java
  • Java HttpURLConnection超时问题

    Java中可以使用HttpURLConnection来请求WEB资源。
    HttpURLConnection对象不能直接构造,需要通过URL.openConnection()来获得HttpURLConnection对象,示例代码如下:
    String szUrl = “http://www.ee2ee.com/”;
    URL url = new URL(szUrl);
    HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();

    HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:
    System.setProperty(”sun.net.client.defaultConnectTimeout”, 超时毫秒数字符串);
    System.setProperty(”sun.net.client.defaultReadTimeout”, 超时毫秒数字符串);

    其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)
    sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)

    例如:
    System.setProperty(”sun.net.client.defaultConnectTimeout”, “30000″);
    System.setProperty(”sun.net.client.defaultReadTime

    Java中可以使用HttpURLConnection来请求WEB资源。
    HttpURLConnection对象不能直接构造,需要通过URL.openConnection()来获得HttpURLConnection对象,示例代码如下:
    String szUrl = “http://www.ee2ee.com/”;
    URL url = new URL(szUrl);
    HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();

    HttpURLConnection是基于HTTP协议的,其底层通过socket通信实现。如果不设置超时(timeout),在网络异常的情况下,可能会导致程序僵死而不继续往下执行。可以通过以下两个语句来设置相应的超时:
    System.setProperty(”sun.net.client.defaultConnectTimeout”, 超时毫秒数字符串);
    System.setProperty(”sun.net.client.defaultReadTimeout”, 超时毫秒数字符串);

    其中: sun.net.client.defaultConnectTimeout:连接主机的超时时间(单位:毫秒)
    sun.net.client.defaultReadTimeout:从主机读取数据的超时时间(单位:毫秒)

    例如:

    System.setProperty(”sun.net.client.defaultConnectTimeout”, “30000″);
    System.setProperty(”sun.net.client.defaultReadTimeout”, “30000″);

    JDK 1.5以前的版本,只能通过设置这两个系统属性来控制网络超时。在1.5中,还可以使用HttpURLConnection的父类URLConnection的以下两个方法:
    setConnectTimeout:设置连接主机超时(单位:毫秒)
    setReadTimeout:设置从主机读取数据超时(单位:毫秒)

    例如:
    HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
    urlCon.setConnectTimeout(30000);
    urlCon.setReadTimeout(30000);

    需要注意的是,笔者在JDK1.4.2环境下,发现在设置了 defaultReadTimeout的情况下,如果发生网络超时,HttpURLConnection会自动重新提交一次请求,出现一次请求调用,请求服务器两次的问题(Trouble)。我认为这是JDK1.4.2的一个bug。在JDK1.5.0中,此问题已得到解决,不存在自动重发现象。 out”, “30000″);

    JDK 1.5以前的版本,只能通过设置这两个系统属性来控制网络超时。在1.5中,还可以使用HttpURLConnection的父类URLConnection的以下两个方法:
    setConnectTimeout:设置连接主机超时(单位:毫秒)
    setReadTimeout:设置从主机读取数据超时(单位:毫秒)

    例如:
    HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
    urlCon.setConnectTimeout(30000);
    urlCon.setReadTimeout(30000);

    需要注意的是,笔者在JDK1.4.2环境下,发现在设置了 defaultReadTimeout的情况下,如果发生网络超时,HttpURLConnection会自动重新提交一次请求,出现一次请求调用,请求服务器两次的问题(Trouble)。我认为这是JDK1.4.2的一个bug。在JDK1.5.0中,此问题已得到解决,不存在自动重发现象。

  • 相关阅读:
    c#配置文件
    C#预处理指令
    C#面向对象详解
    231. Power of Two
    226. Invert Binary Tree
    C语言函数入参压栈顺序为什么是从右向左?
    对C++ 虚函数的理解
    悲观锁和乐观锁
    什么是索引
    CHAR 和VARCHAR的区别
  • 原文地址:https://www.cnblogs.com/jifeng/p/1707576.html
Copyright © 2011-2022 走看看