1. 程式人生 > >java呼叫http介面的記錄

java呼叫http介面的記錄

最近幾天因為專案需求,做一個門禁管理。而門禁資訊來源則是妙兜。所以我們這邊需要呼叫妙兜的介面,主要是“裝置安裝登記介面”和“鑰匙憑證發放介面”。

因為之前沒有做過“java呼叫http介面”類似功能,所以在網上找了很多,也比較久。如下程式碼感覺比較可以,使用過程中也沒出什麼問題,所以就記錄了下來。

   程式碼如下:

  1. package com.zhang.miaodou;
  2. import java.io.BufferedReader;
  3. import java.io.DataOutputStream;
  4. import java.io.InputStreamReader;
  5. import java.net.HttpURLConnection;
  6. import java.net.URL;
  7. import java.net.URLEncoder;
  8. public class DemoTest1 {
  9. public static final String GET_URL = "http://112.4.27.9/mall-back/if_user/store_list?storeId=32";
  10. // public static final String POST_URL = "http://112.4.27.9/mall-back/if_user/store_list";
  11. // 妙兜測試介面
  12. public static final String POST_URL = "http://121.40.204.191:8180/mdserver/service/installLock"
    ;
  13. /**
  14. * 介面呼叫 GET
  15. */
  16. public static void httpURLConectionGET() {
  17. try {
  18. URL url = new URL(GET_URL); // 把字串轉換為URL請求地址
  19. HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 開啟連線
  20. connection.connect();// 連線會話
  21. // 獲取輸入流
  22. BufferedReader br = new
    BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
  23. String line;
  24. StringBuilder sb = new StringBuilder();
  25. while ((line = br.readLine()) != null) {// 迴圈讀取流
  26. sb.append(line);
  27. }
  28. br.close();// 關閉流
  29. connection.disconnect();// 斷開連線
  30. System.out.println(sb.toString());
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. System.out.println("失敗!");
  34. }
  35. }
  36. /**
  37. * 介面呼叫 POST
  38. */
  39. public static void httpURLConnectionPOST () {
  40. try {
  41. URL url = new URL(POST_URL);
  42. // 將url 以 open方法返回的urlConnection 連線強轉為HttpURLConnection連線 (標識一個url所引用的遠端物件連線)
  43. HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此時cnnection只是為一個連線物件,待連線中
  44. // 設定連線輸出流為true,預設false (post 請求是以流的方式隱式的傳遞引數)
  45. connection.setDoOutput(true);
  46. // 設定連線輸入流為true
  47. connection.setDoInput(true);
  48. // 設定請求方式為post
  49. connection.setRequestMethod("POST");
  50. // post請求快取設為false
  51. connection.setUseCaches(false);
  52. // 設定該HttpURLConnection例項是否自動執行重定向
  53. connection.setInstanceFollowRedirects(true);
  54. // 設定請求頭裡面的各個屬性 (以下為設定內容的型別,設定為經過urlEncoded編碼過的from引數)
  55. // application/x-javascript text/xml->xml資料 application/x-javascript->json物件 application/x-www-form-urlencoded->表單資料
  56. // ;charset=utf-8 必須要,不然妙兜那邊會出現亂碼【★★★★★】
  57. connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
  58. // 建立連線 (請求未開始,直到connection.getInputStream()方法呼叫時才發起,以上各個引數設定需在此方法之前進行)
  59. connection.connect();
  60. // 建立輸入輸出流,用於往連線裡面輸出攜帶的引數,(輸出內容為?後面的內容)
  61. DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
  62. String app_key = "app_key="+ URLEncoder.encode("4f7bf8c8260124e6e9c6bf094951a111", "utf-8"); // 已修改【改為錯誤資料,以免資訊洩露】
  63. String agt_num = "&agt_num="+ URLEncoder.encode("10111", "utf-8"); // 已修改【改為錯誤資料,以免資訊洩露】
  64. String pid = "&pid="+ URLEncoder.encode("BLZXA150401111", "utf-8"); // 已修改【改為錯誤資料,以免資訊洩露】
  65. String departid = "&departid="+ URLEncoder.encode("10007111", "utf-8"); // 已修改【改為錯誤資料,以免資訊洩露】
  66. String install_lock_name = "&install_lock_name="+ URLEncoder.encode("南天大門", "utf-8");
  67. String install_address = "&install_address="+ URLEncoder.encode("北京育新", "utf-8");
  68. String install_gps = "&install_gps="+ URLEncoder.encode("116.350888,40.011001", "utf-8");
  69. String install_work = "&install_work="+ URLEncoder.encode("小李", "utf-8");
  70. String install_telete = "&install_telete="+ URLEncoder.encode("13000000000", "utf-8");
  71. String intall_comm = "&intall_comm="+ URLEncoder.encode("一切正常", "utf-8");
  72. // 格式 parm = aaa=111&bbb=222&ccc=333&ddd=444
  73. String parm = app_key+ agt_num+ pid+ departid+ install_lock_name+ install_address+ install_gps+ install_work+ install_telete+ intall_comm;
  74. // 將引數輸出到連線
  75. dataout.writeBytes(parm);
  76. // 輸出完成後重新整理並關閉流
  77. dataout.flush();
  78. dataout.close(); // 重要且易忽略步驟 (關閉流,切記!)
  79. // System.out.println(connection.getResponseCode());
  80. // 連線發起請求,處理伺服器響應 (從連接獲取到輸入流幷包裝為bufferedReader)
  81. BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
  82. String line;
  83. StringBuilder sb = new StringBuilder(); // 用來儲存響應資料
  84. // 迴圈讀取流,若不到結尾處
  85. while ((line = bf.readLine()) != null) {
  86. // sb.append(bf.readLine());
  87. sb.append(line).append(System.getProperty("line.separator"));
  88. }
  89. bf.close(); // 重要且易忽略步驟 (關閉流,切記!)
  90. connection.disconnect(); // 銷燬連線
  91. System.out.println(sb.toString());
  92. } catch (Exception e) {
  93. e.printStackTrace();
  94. }
  95. }
  96. public static void main(String[] args) {
  97. // httpURLConectionGET();
  98. httpURLConnectionPOST();
  99. }
  100. }


 只使用了POST請求方法,GET沒有用,為了保證程式碼完整性所以沒有刪除GET請求程式碼 
 返回結果如下:
  1. {
  2. "status" : "fail",
  3. "code" : "ERR001",
  4. "msg" : "商戶10111不存在"
  5. }