http://blog.sina.com.cn/s/blog_87216a0001014sm7.htmlhtml
http://www.2cto.com/kf/201305/208770.htmljava
------------------------------------------------------------android
http://superonion.iteye.com/blog/1545496浏览器
HttpURLConnection是java的标准类,HttpURLConnection继承自URLConnection,可用于向指定网站发送GET请求、POST请求。它在URLConnection的基础上提供了以下便捷的方法:缓存
在通常状况下,若是只是须要Web站点的某个简单页面提交请求并获取服务器响应,HttpURLConnection彻底能够胜任。但在绝大部分状况下,Web站点的网页可能没这么简单,这些页面并非经过一个简单的URL就可访问的,可能须要用户登陆并且具备相应的权限才可访问该页面。在这种状况下,就须要涉及Session、Cookie的处理了,若是打算使用HttpURLConnection来处理这些细节,固然也是可能实现的,只是处理起来难度就大了。服务器
为了更好地处理向Web站点请求,包括处理Session、Cookie等细节问题,Apache开源组织提供了一个HttpClient项目,看它的名称就知道,它是一个简单的HTTP客户端(并非浏览器),能够用于发送HTTP请求,接收HTTP响应。但不会缓存服务器的响应,不能执行HTML页面中嵌入的Javascript代码;也不会对页面内容进行任何解析、处理。网络
1.概念 框架
HTTP 协议多是如今 Internet 上使用得最多、最重要的协议了,愈来愈多的 Java 应用程序须要直接经过 HTTP 协议来访问网络资源。在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。可是对于大部分应用程序来讲,JDK 库自己提供的功能还不够丰富和灵活。工具
除此以外,在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,而且它支持 HTTP 协议最新的版本和建议。使用HttpClient能够快速开发出功能强大的Http程序。网站
2.区别
HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等,
HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,好比重访问的自定义,以及一些高级功能等。
http://hi.baidu.com/wendaoeryu/item/fc2264add98fbde614329bf0
-------------------------------------------------------------------------
使用HttpClient:
NameValuePair nameValuePair1 = new BasicNameValuePair("name", "yang");
NameValuePair nameValuePair2 = new BasicNameValuePair("pwd","123123");
List nameValuePairs = new ArrayList();
nameValuePairs.add(nameValuePair1);
nameValuePairs.add(nameValuePair2);
String validateURL = "http://10.0.2.2:8080/testhttp1/TestServlet";
try {
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams,5000); //设置链接超时为5秒
HttpClient client = new DefaultHttpClient(httpParams); // 生成一个http客户端发送请求对象
HttpPost httpPost = new HttpPost(urlString); //设定请求方式
if (nameValuePairs!=null && nameValuePairs.size()!=0) {
//把键值对进行编码操做并放入HttpEntity对象中
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));
}
HttpResponse httpResponse = client.execute(httpPost); // 发送请求并等待响应
// 判断网络链接是否成功
if (httpResponse.getStatusLine().getStatusCode() != 200) {
System.out.println("网络错误异常!!!!");
return false;
}
HttpEntity entity = httpResponse.getEntity(); // 获取响应里面的内容
inputStream = entity.getContent(); // 获得服务气端发回的响应的内容(都在一个流里面)
// 获得服务气端发回的响应的内容(都在一个字符串里面)
// String strResult = EntityUtils.toString(entity);
} catch (Exception e) {
System.out.println("这是异常!");
}
使用HttpURLConnection:
String validateURL="http://10.0.2.2:8080/testhttp1/TestServlet?name=yang&pwd=123123";
try {
URL url = new URL(validateUrl); //建立URL对象
//返回一个URLConnection对象,它表示到URL所引用的远程对象的链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000); //设置链接超时为5秒
conn.setRequestMethod("GET"); //设定请求方式
conn.connect(); //创建到远程对象的实际链接
//返回打开链接读取的输入流
DataInputStream dis = new DataInputStream(conn.getInputStream());
//判断是否正常响应数据
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
System.out.println("网络错误异常!!!!");
return false;
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("这是异常!");
} finally {
if (conn != null) {
conn.disconnect(); //中断链接
}