http請求有八中方法GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,CONNECT,GET和POST比較常用,由於項目開發需要,開始自己研究PUT請求方法,其實和POST請求方法差不多。下面來講一下常用的請求方法和不常用的PUT方法。
一、HEAD方法跟GET方法相同,只不過服務器響應時不會返回消息體。一個HEAD請求的響應中,HTTP頭中包含的原信息應該和一個GET請求的響應消息相同。這種方法可以用來獲取請求中隱含的元信息,而不用傳輸實體本身。也經常用來測試超鏈接的有效性、可用性和最近的修改。
HEAD請求常常被忽 略,但是能提供很多有用的信息,特別是在有限的速度和帶寬下。主要有以下特點:
1、只請求資源的首部;
2、檢查超鏈接的有效性;
3、檢查網頁是否被修改;
4、多用於自動搜索機器人獲取網頁的標誌信息,獲取rss種子信息,或者傳遞安全認證信息等
二、GET請求方法是最常用的HTTP請求之一,有以下幾個特點:
1、默認的請求方法;
2、GET請求通常用於獲取信息,所以應該是安全的、冪等的。
3、請求數據表現在URL上,以名稱/值的形式發送。對請求的長度有限制,
4、在IE和Opera等瀏覽器會產生URL緩存。如果不增加冗餘的請求參數,響應會返回緩存中數據,導致結果不一致。
5、安全性低。是直接跟在請求頭的後面而且是明文
三、POST方法
- 標註已存在的資源;
- 提交數據
- 通過追加的操作來拓展數據庫
POST方法有以下特點:
1、主要用於向服務器提交數據,而GET主要用於獲取;
2、數據封裝在請求中,而不是URL中,因此沒有長度限制;
3、不能緩存,而GET請求會緩存,在IE等瀏覽器中會直接返回緩存數據。
四、PUT方法
PUT方法通常用於向服務器發送請求,如果URI不存在,則要求服務器根據請求創建資源,如果存在,服務器就接受請求內容,並修改URI資源的原始版本。就是通常俗稱的上傳資源。
HTTP/1.1沒有定義一個PUT請求如何影響原始服務器的狀態,PUT請求必須遵守信息傳輸要求。
直接上代碼:
public static void getUploadInformation(String path,String obj) throws IOException, JSONException { //創建連接 URL url = new URL(path); HttpURLConnection connection ; StringBuffer sbuffer=null; try { //添加 請求內容 connection= (HttpURLConnection) url.openConnection(); //設置http連接屬性 connection.setDoOutput(true);// http正文內,因此需要設爲true, 默認情況下是false; connection.setDoInput(true);// 設置是否從httpUrlConnection讀入,默認情況下是true; connection.setRequestMethod("PUT"); // 可以根據需要 提交 GET、POST、DELETE、PUT等http提供的功能 //connection.setUseCaches(false);//設置緩存,注意設置請求方法爲post不能用緩存 // connection.setInstanceFollowRedirects(true); connection.setRequestProperty("Host", "*******"); //設置請 求的服務器網址,域名,例如***.**.***.*** connection.setRequestProperty("Content-Type", " application/json");//設定 請求格式 json,也可以設定xml格式的 connection.setRequestProperty("Accept-Charset", "utf-8"); //設置編碼語言 connection.setRequestProperty("X-Auth-Token", "token"); //設置請求的token connection.setRequestProperty("Connection", "keep-alive"); //設置連接的狀態
connection.setRequestProperty("Transfer-Encoding", "chunked");//設置傳輸編碼connection.setRequestProperty("Content-Length", obj.toString().getBytes().length + ""); //設置文件請求的長度
connection.setReadTimeout(10000);//設置讀取超時時間
connection.setConnectTimeout(10000);//設置連接超時時間
connection.connect();
OutputStream out = connection.getOutputStream();//向對象輸出流寫出數據,這些數據將存到內存緩衝區中
out.write(obj.toString().getBytes()); //out.write(new String("測試數據").getBytes()); //刷新對象輸出流,將任何字節都寫入潛在的流中
out.flush();
// 關閉流對象,此時,不能再向對象輸出流寫入任何數據,先前寫入的數據存在於內存緩衝區中
out.close();
//讀取響應
if (connection.getResponseCode()==200) {
// 從服務器獲得一個輸入流
InputStreamReader inputStream =new InputStreamReader(connection.getInputStream());//調用HttpURLConnection連接對象的getInputStream()函數, 將內存緩衝區中封裝好的完整的HTTP請求電文發送到服務端。BufferedReader reader = new BufferedReader(inputStream);
String lines;sbuffer= new StringBuffer("");
while ((lines = reader.readLine()) != null) {
lines = new String(lines.getBytes(), "utf-8");
sbuffer.append(lines); }
reader.close();
}else{
Log.i(TAG,"請求失敗"+connection.getResponseCode());
}
//斷開連接
connection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
json數據
public static String QueryLoginBody(String type,String userid,String checksum){ String json="{\"type\":\""+type+"\","+"\"jid\":\""+userid+"\","+"\"checkSum\":\""+checksum+"\"}"; return json; }
調用方法,輸入要傳入的參數,然後直接把json數據放進去就好了
String json=AppUtils.QueryLoginBody("login","usr","123132"); AppUtils.getUploadInformation("http://www.xxx.com", json);
參考鏈接:
http://blog.csdn.net/CrystalDestiny/article/details/46469465
StackOverflow論壇:
Android實用的源碼鏈接:http://www.apkbus.com/?fromuser=StruggleLin