HttpURLConnection發送GET、POST請求


HttpURLConnection發送GET、POST請求

/**
* GET請求
*
* @param requestUrl 請求地址
* @return
*/
public String get(String requestUrl) {

  HttpURLConnection connection = null;
  InputStream is = null;
  BufferedReader br = null;
  String result = null;

  try {
      /** 創建遠程url連接對象 */
      URL url = new URL(requestUrl);

      /** 通過遠程url對象打開一個連接,強制轉換為HttpUrlConnection類型 */
      connection = (HttpURLConnection) url.openConnection();

      /** 設置連接方式:GET */
      connection.setRequestMethod("GET");
      /** 設置連接主機服務器超時時間:15000毫秒 */
      connection.setConnectTimeout(15000);
      /** 設置讀取遠程返回的數據時間:60000毫秒 */
      connection.setReadTimeout(60000);

      /** 設置通用的請求屬性 */
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection", "Keep-Alive");
      connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 設置傳入參數的格式:請求參數應該是 name1=value1&name2=value2 的形式
      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      /** 發送GET方式請求,使用connet方法建立和遠程資源之間的實際連接即可 */
      connection.connect();

      /*-------------------------->*/
      /** 獲取所有相應頭字段 */
      Map<String, List<String>> map = connection.getHeaderFields();
      /** 遍歷響應頭字段 */
      for (String key : map.keySet()) {
      System.out.println(key + "---------->" + map.get(key));
      }
      /* <-------------------------- */

      /** 請求成功:返回碼為200 */
      if (connection.getResponseCode() == 200) {
        /** 通過connection連接,獲取輸入流 */
        is = connection.getInputStream();
        /** 封裝輸入流is,並指定字符集 */
        br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        /** 存放數據 */
        StringBuffer sbf = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
          sbf.append(line);
          sbf.append("\r\n");
        }
        result = sbf.toString();
      }

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      /** 關閉資源 */
      try {

        if (null != br) {
          br.close();
        }

        if (null != is) {
          is.close();
        }

      } catch (Exception e) {
        e.printStackTrace();
      }

      /** 關閉遠程連接 */
      // 斷開連接,最好寫上,disconnect是在底層tcp socket鏈接空閑時才切斷。如果正在被其他線程使用就不切斷。
      // 固定多線程的話,如果不disconnect,鏈接會增多,直到收發不出信息。寫上disconnect后正常一些
      connection.disconnect();

      System.out.println("--------->>> GET request end <<<----------");
    }

    return result;
  }

/**
* POST請求
*
* @param requestUrl 請求地址
* @param param 請求數據
* @return
*/
public String post(String requestUrl, String param) {

  HttpURLConnection connection = null;
  InputStream is = null;
  OutputStream os = null;
  BufferedReader br = null;
  String result = null;

  try {
      /** 創建遠程url連接對象 */
      URL url = new URL(requestUrl);

      /** 通過遠程url對象打開一個連接,強制轉換為HttpUrlConnection類型 */
      connection = (HttpURLConnection) url.openConnection();

      /** 設置連接方式:POST */
      connection.setRequestMethod("POST");
      /** 設置連接主機服務器超時時間:15000毫秒 */
      connection.setConnectTimeout(15000);
      /** 設置讀取遠程返回的數據時間:60000毫秒 */
      connection.setReadTimeout(60000);

      /** 設置是否向httpUrlConnection輸出,設置是否從httpUrlConnection讀入,此外發送post請求必須設置這兩個 */
      // 默認值為:false,當向遠程服務器傳送數據/寫數據時,需要設置為true
      connection.setDoOutput(true);
      // 默認值為:true,當前向遠程服務讀取數據時,設置為true,該參數可有可無
      connection.setDoInput(true);

      /** 設置通用的請求屬性 */
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection", "Keep-Alive");
      connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 設置傳入參數的格式:請求參數應該是 name1=value1&name2=value2 的形式
      connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

      /** 通過連接對象獲取一個輸出流 */
      os = connection.getOutputStream();
      /** 通過輸出流對象將參數寫出去/傳輸出去,它是通過字節數組寫出的 */
      // 若使用os.print(param);則需要釋放緩存:os.flush();即使用字符流輸出需要釋放緩存,字節流則不需要
      if(param != null && param.length() > 0) {
        os.write(param.getBytes());
      }

      /** 請求成功:返回碼為200 */
      if (connection.getResponseCode() == 200) {
        /** 通過連接對象獲取一個輸入流,向遠程讀取 */
        is = connection.getInputStream();
        /** 封裝輸入流is,並指定字符集 */
        br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        /** 存放數據 */
        StringBuffer sbf = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
          sbf.append(line);
          sbf.append("\r\n");
        }
        result = sbf.toString();
      }

    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      /** 關閉資源 */
      try {

        if (null != br) {
          br.close();
        }

        if (null != is) {
            is.close();
        }

        if (null != os) {
          os.close();
        }

      } catch (Exception e) {
        e.printStackTrace();
      }

      /** 關閉遠程連接 */
      // 斷開連接,最好寫上,disconnect是在底層tcp socket鏈接空閑時才切斷。如果正在被其他線程使用就不切斷。
      // 固定多線程的話,如果不disconnect,鏈接會增多,直到收發不出信息。寫上disconnect后正常一些
      connection.disconnect();

      System.out.println("--------->>> POST request end <<<----------");
    }

    return result;
  }

 

參考:https://blog.csdn.net/u012513972/article/details/79569888


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM