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文件下载\httpURLConnection文件下载
HttpURLConnection的demo,里面有网络请求get post 上传文件,下载文件,介绍HttpURLConnection这个类整体流程是怎样使用的,方便初学者学习
调用URL对象的openConnection( )来获取HttpURLConnection对象实例: HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 设置HTTP请求使用的方法:conn.setRequestMethod("GET"); 设置连接超时,...
自己写了一个基于httpurlconnection和Asynctask的例子
基于HttpURLConnection的封装http请求,进行了https校验忽略,对get和post进行了整合,更方便请求,对header以及超时的进行了可配置化处理,对返回也进行了封装,便于请求结果的处理。
import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import java.util.Map; public class HttpTest { private HttpURLConnection hc = ...
HttpURLConnection使用总结示例源码
HttpUrlConnection获取json数据
使用HttpURLConnection发送短信
代码包含了httpurlconnection基本操作,一些正常的操作。
java HttpURLConnection示例 HttpURLConnection工具
一个简单的例子,使用HttpURLConnection下载图片
主要介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,非常具有实用价值,需要的朋友可以参考下
封装httpurlconnection 自己动手丰衣足食
远程连接服务器HttpURLConnection,该工具有上传到远程服务器的方法,供参考远程连接服务器HttpURLConnection,该工具有上传到远程服务器的方法,供参考
java网络请求工具类 HttpURLConnection post请求工具类HttpURLConnection httpURLConnection = (HttpURLConnection) url .openConnection(); httpURLConnection.setRequestMethod("POST");// 提交模式
HttpURLConnection用法详解, 轻松掌握HttpURLConnection开发原理
在 Android 中对 HttpURLConnection 的简单使用,仅供参考。
Android HttpUrlConnection使用方法 post and get json.