天天看點

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