HttpURLConnection 發送PUT請求,設置請求頭參數 json請求體

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論壇:

http://stackoverflow.com/questions/15678208/making-put-request-with-json-data-using-httpurlconnection-is-not-working



Android實用的源碼鏈接:http://www.apkbus.com/?fromuser=StruggleLin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章