1. 程式人生 > >如何在java中發起http請求

如何在java中發起http請求

1、post(引數json格式)

try {
    //請求地址
URL urlHttp = new URL(StaticData.URL+"/condition/query_camera");
// 將url 以 open方法返回的urlConnection  連線強轉為HttpURLConnection連線  (標識一個url所引用的遠端物件連線)
HttpURLConnection connection = (HttpURLConnection) urlHttp.openConnection();// 此時cnnection只是為一個連線物件,待連線中
connection.setRequestProperty("session_id"
,session_id); // 設定連線輸出流為true,預設false (post 請求是以流的方式隱式的傳遞引數) connection.setDoOutput(true); // 設定連線輸入流為true connection.setDoInput(true); // 設定請求方式為post connection.setRequestMethod("POST"); // post請求快取設為false connection.setUseCaches(false); // 設定該HttpURLConnection例項是否自動執行重定向 connection.setInstanceFollowRedirects(true
); // 設定請求頭裡面的各個屬性 (以下為設定內容的型別,設定為經過urlEncoded編碼過的from引數) // application/x-javascript text/xml->xml資料 application/x-javascript->json物件 application/x-www-form-urlencoded->表單資料 // ;charset=utf-8 必須要,不然妙兜那邊會出現亂碼【★★★★★】 connection.setRequestProperty("Content-Type", "application/x-javascript;charset=utf-8"
); // 建立連線 (請求未開始,直到connection.getInputStream()方法呼叫時才發起,以上各個引數設定需在此方法之前進行) connection.connect(); // 建立輸入輸出流,用於往連線裡面輸出攜帶的引數,(輸出內容為?後面的內容) DataOutputStream dataout = new DataOutputStream(connection.getOutputStream()); /** * 設定引數 */ /*String conditionStr = "condition="+ condition; String orderStr = "&order="+ order; String startStr = "&start="+ start; String limitStr = "&limit="+ limit; String session_idStr = "&session_id="+ session_id; // 格式 parm = aaa=111&bbb=222&ccc=333&ddd=444 String parm = conditionStr + conditionStr + orderStr + startStr + limitStr + session_idStr;*/ /** * 設定引數:格式json */ Map map = new HashMap(); map.put("condition",condition); map.put("order",order); map.put("start",start); map.put("limit",limit); //轉成json物件 String json = JSON.toJSONString(map); String parm = json; // 將引數輸出到連線 dataout.writeBytes(parm); // 輸出完成後重新整理並關閉流 dataout.flush(); dataout.close(); // 重要且易忽略步驟 (關閉流,切記!) // 連線發起請求,處理伺服器響應 (從連接獲取到輸入流幷包裝為bufferedReader) BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line; StringBuilder sb = new StringBuilder(); // 用來儲存響應資料 // 迴圈讀取流,若不到結尾處 while ((line = bf.readLine()) != null) { sb.append(line).append(System.getProperty("line.separator")); } bf.close(); // 重要且易忽略步驟 (關閉流,切記!) connection.disconnect(); // 銷燬連線 Map mapResult = (Map)JSON.parse(sb.toString() ); ApiResult apiResult = new ApiResult(true,mapResult); return apiResult; } catch (Exception e) { e.printStackTrace(); return new ApiResult(false,null); }

2、get(引數json格式)

try {
    URL url = new URL(StaticData.URL+"/repository");    // 把字串轉換為URL請求地址
HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 開啟連線
connection.setRequestProperty("session_id",session_id);
connection.connect();// 連線會話
    // 獲取輸入流
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
StringBuilder sb = new StringBuilder();
    while ((line = br.readLine()) != null) {
        // 迴圈讀取流
sb.append(line);
}
    br.close();// 關閉流
connection.disconnect();// 斷開連線
Map mapResult = (Map)JSON.parse(sb.toString() );
ApiResult apiResult = new ApiResult(true,mapResult);
    return apiResult;
} catch (Exception e) {
    e.printStackTrace();
System.out.println("失敗!");
    return new ApiResult(false,null);
}

3、post(引數非json格式)

try {
    //請求地址
URL urlHttp = new URL(StaticData.URL+"/condition/query_camera");
// 將url 以 open方法返回的urlConnection  連線強轉為HttpURLConnection連線  (標識一個url所引用的遠端物件連線)
HttpURLConnection connection = (HttpURLConnection) urlHttp.openConnection();// 此時cnnection只是為一個連線物件,待連線中
connection.setRequestProperty("session_id",session_id);
// 設定連線輸出流為true,預設false (post 請求是以流的方式隱式的傳遞引數)
connection.setDoOutput(true);
// 設定連線輸入流為true
connection.setDoInput(true);
// 設定請求方式為post
connection.setRequestMethod("POST");
// post請求快取設為false
connection.setUseCaches(false);
// 設定該HttpURLConnection例項是否自動執行重定向
connection.setInstanceFollowRedirects(true);
// 設定請求頭裡面的各個屬性 (以下為設定內容的型別,設定為經過urlEncoded編碼過的from引數)
    // application/x-javascript text/xml->xml資料 application/x-javascript->json物件 application/x-www-form-urlencoded->表單資料
    // ;charset=utf-8 必須要,不然妙兜那邊會出現亂碼【★★★★★】
connection.setRequestProperty("Content-Type", "application/x-javascript;charset=utf-8");
// 建立連線 (請求未開始,直到connection.getInputStream()方法呼叫時才發起,以上各個引數設定需在此方法之前進行)
connection.connect();
// 建立輸入輸出流,用於往連線裡面輸出攜帶的引數,(輸出內容為?後面的內容)
DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
/**
     * 設定引數
     */
String conditionStr = "condition=" + condition;
String orderStr = "&order=" + order;
String startStr = "&start=" + start;
String limitStr = "&limit=" + limit;
String session_idStr = "&session_id=" + session_id;
// 格式 parm = aaa=111&bbb=222&ccc=333&ddd=444
String parm = conditionStr + conditionStr + orderStr + startStr + limitStr + session_idStr;
// 將引數輸出到連線
dataout.writeBytes(parm);
// 輸出完成後重新整理並關閉流
dataout.flush();
dataout.close(); // 重要且易忽略步驟 (關閉流,切記!)
    // 連線發起請求,處理伺服器響應  (從連接獲取到輸入流幷包裝為bufferedReader)
BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
StringBuilder sb = new StringBuilder(); // 用來儲存響應資料
    // 迴圈讀取流,若不到結尾處
while ((line = bf.readLine()) != null) {
        sb.append(line).append(System.getProperty("line.separator"));
}
    bf.close();    // 重要且易忽略步驟 (關閉流,切記!)
connection.disconnect(); // 銷燬連線
Map mapResult = (Map)JSON.parse(sb.toString() );
ApiResult apiResult = new ApiResult(true,mapResult);
    return apiResult;
} catch (Exception e) {
    e.printStackTrace();
    return new ApiResult(false,null);
}