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(); //中斷鏈接
}