HttpURLConnection timeout

xiaoxiao2026-03-25  4

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中,此问题已得到解决,不存在自动重发现象。

 

例子:---------------------------------------------------

public static void SendMtToHttp(String sUrl, int comm_id, String userphone, String short_message,String url_addr,String linkid){    try {           java.net.URL url = new java.net.URL(sUrl);           java.net.HttpURLConnection con = (HttpURLConnection)url.openConnection();           con.setRequestMethod("POST");           System.setProperty("sun.net.client.defaultConnectTimeout", "30000");//jdk1.4换成这个,连接超时           System.setProperty("sun.net.client.defaultReadTimeout", "30000"); //jdk1.4换成这个,读操作超时           //con.setConnectTimeout(5000);//jdk 1.5换成这个,连接超时           // con.setReadTimeout(5000);//jdk 1.5换成这个,读操作超时           con.setDoOutput(true);           PrintWriter out = new PrintWriter(con.getOutputStream());                       String str = "url=" + url;           System.out.println("");           out.println(str);           out.flush();           BufferedReader in = null;           in = new BufferedReader( new InputStreamReader(con.getInputStream()));

           String destStr = "";           String inputLin="";           while ((inputLin = in.readLine()) != null)             {                destStr += inputLin;             }           destStr = URLDecoder.decode(destStr,"gb2312");           System.out.println(destStr);           out.close();         }        catch(Exception e)        {          e.printStackTrace();        }   }

转载请注明原文地址: https://www.6miu.com/read-5046253.html

最新回复(0)