`
hanqunfeng
  • 浏览: 1541936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HttpURLConnection超时处理

    博客分类:
  • JAVA
阅读更多

原文地址:http://hi.baidu.com/ibwwbtf_jie/blog/item/5cb05b10cb9adef9c3ce79ac.html

 

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();
}
}


分享到:
评论

相关推荐

    Java HttpURLConnection超时和IO异常处理

    下面将详细讨论`HttpURLConnection`的超时设置、IO异常处理以及如何应对这些问题。 1. **超时设置**: - `setConnectTimeout(int timeout)`:这个方法用于设置建立网络连接的超时时间,单位为毫秒。如果在指定时间...

    Android超时处理

    "Android超时处理"这个话题聚焦于如何在Android应用中优雅地处理网络请求超时的情况。下面将详细讲解这一主题,包括网络连接的检测、请求的成功与失败判断、超时机制的理解以及如何在实际项目中应用。 首先,我们...

    java 访问网络 下载文件 爬虫 超时处理解决方案

    本文将深入探讨如何在Java中有效处理这些方面的问题,特别是超时处理解决方案,这对于构建高效、稳定的网络应用至关重要。 ### Java访问网络 在Java中,访问网络通常涉及到使用`java.net`包中的类,如`URL`和`...

    HttpURLConnection文件下载\httpURLConnection文件下载

    总的来说,这段代码展示了如何利用`HttpURLConnection`进行文件下载的基本步骤,包括创建连接、设置超时、读取和写入数据。注意,实际应用中可能需要考虑更多的异常处理和错误恢复策略,以及更高效的下载策略,如...

    Httpurlconnection

    除了基本的请求和响应处理,HttpURLConnection还支持设置连接超时和读取超时,这对于防止程序在等待响应时阻塞非常重要: ```java connection.setConnectTimeout(5000); // 设置连接超时为5秒 connection....

    超时处理abc

    在IT行业中,超时处理是一项关键的技术,特别是在网络通信和服务器端编程中。当我们提到“超时处理abc”,这可能涉及到网络请求、数据传输或者任务执行的超时设定,以确保系统稳定性和资源的有效利用。在这个场景中...

    使用HttpURLConnection下载图片

    在Java编程中,`HttpURLConnection`是用于处理HTTP协议的核心类,它提供了向网络资源发起请求并接收响应的能力。在本例中,我们将探讨如何使用`HttpURLConnection`来下载图片,这是一个基础但实用的网络编程任务。...

    使用HttpURLConnection

    默认情况下,`HttpURLConnection`没有设置超时,如果网络出现问题,程序可能会无限制地等待响应,导致程序阻塞。我们需要分别设置连接超时(connectTimeout)和读取超时(readTimeout),确保在一定时间内未得到响应...

    HttpURLConnection使用总结示例源码

    1. 设置超时:可以设置连接超时和读取超时,防止程序卡死。 ```java connection.setConnectTimeout(5000); // 连接超时5秒 connection.setReadTimeout(10000); // 读取超时10秒 ``` 2. 使用HTTP缓存:...

    AsyncTask结合HttpUrlConnection的例子

    总结来说,`AsyncTask`结合`HttpURLConnection`能有效处理网络请求,避免阻塞主线程,同时保持用户界面的交互性。这个例子为开发者提供了一个基础的网络请求模板,可以根据实际需求进行扩展和定制。在实际开发中,你...

    Android 简单使用 HttpURLConnection

    在`HttpURLConnectionSample`这个项目中,可能包含了一个具体的`HttpURLConnection`使用示例,包括如何构建请求,解析响应,以及处理可能出现的异常情况。通过学习和分析这个示例代码,你可以更好地理解`...

    HttpUrlConnection实例

    3. **设置连接属性**:可能需要设置超时时间,如读取超时和连接超时。 ```java connection.setConnectTimeout(5000); connection.setReadTimeout(5000); ``` 4. **开启请求**:这会建立实际的网络连接。 ```java ...

    远程连接服务器HttpURLConnection

    另外,`HttpURLConnection`支持设置超时、处理重定向等高级特性。 至于文件`jyWebClient`和`jyWebService`,它们可能是实现特定Web客户端或服务端功能的Java代码示例。这些文件可能包含了如何利用`...

    HttpURLConnection servlet 多文件参数 断点上传

    在实际应用中,我们还需要考虑错误处理和重试机制,例如网络中断、超时等情况。为了提高用户体验,可以使用异步上传,通过ExecutorService创建后台线程处理文件上传,主线程则更新进度并处理用户交互。 此外,安全...

    封装httpurlconnection

    在这个过程中,我们可以自定义请求头、设置超时时间、处理响应数据等。下面将详细介绍如何封装HTTPURLConnection以及实现相关功能。 1. 创建HTTP请求基础类 首先,我们需要创建一个基础的HTTP请求类,这个类通常...

    Android网络连接2——HttpURLConnection

    `HttpURLConnection`允许我们设置各种请求属性,比如HTTP方法、超时时间、请求头等。例如,我们可以这样设置POST请求: ```java connection.setRequestMethod("POST"); connection.setConnectTimeout(5000); // ...

    Android网络请求框架基于HttpUrlConnection的封装

    2. **错误处理**:包括网络异常、超时、状态码异常等,需要有合适的异常处理机制。 3. **缓存策略**:对于可缓存的数据,可以添加缓存逻辑,提高用户体验。 4. **请求参数处理**:统一处理GET和POST请求的参数,如...

    HttpURLConnection用法详解

    使用HTTPS时,HttpURLConnection会自动处理SSL/TLS加密,但也可以自定义SSLContext和HostnameVerifier以进行更精细的控制。 ### 12. 避免内存泄漏 注意及时关闭输入/输出流,防止内存泄漏。在Java 7及以上版本,...

    HttpUrlConnection使用示例

    在Java编程中,`HttpURLConnection`是用于处理HTTP协议的标准API,它位于`java.net`包下。这个类提供了一种高效且灵活的方式来发送HTTP请求并接收响应,是替代过时的`java.net.URL`和`java.net.HttpURLConnection`的...

    android+httpurlconnection

    使用HTTPURLConnection,开发者可以设置请求方法(如GET或POST),添加请求头,以及设置超时等参数。例如,以下代码展示了如何发送一个GET请求: ```java URL url = new URL("http://example.com/image.jpg"); ...

Global site tag (gtag.js) - Google Analytics