原文地址:https://blog.csdn.net/woshizhangliang999/article/details/47606481
最近幾天因爲項目需求,做一個門禁管理。而門禁信息來源則是妙兜。所以我們這邊需要調用妙兜的接口,主要是“設備安裝登記接口”和“鑰匙憑證發放接口”。
因爲之前沒有做過“java調用http接口”類似功能,所以在網上找了很多,也比較久。如下代碼感覺比較可以,使用過程中也沒出什麼問題,所以就記錄了下來。
代碼如下:
-
package com.zhang.miaodou;
-
import java.io.BufferedReader;
-
import java.io.DataOutputStream;
-
import java.io.InputStreamReader;
-
import java.net.HttpURLConnection;
-
import java.net.URL;
-
import java.net.URLEncoder;
-
public class DemoTest1 {
-
public static final String GET_URL = "http://112.4.27.9/mall-back/if_user/store_list?storeId=32";
-
// public static final String POST_URL = "http://112.4.27.9/mall-back/if_user/store_list";
-
// 妙兜測試接口
-
public static final String POST_URL = "http://121.40.204.191:8180/mdserver/service/installLock";
-
/**
-
* 接口調用 GET
-
*/
-
public static void httpURLConectionGET() {
-
try {
-
URL url = new URL(GET_URL); // 把字符串轉換爲URL請求地址
-
HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 打開連接
-
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();// 斷開連接
-
System.out.println(sb.toString());
-
} catch (Exception e) {
-
e.printStackTrace();
-
System.out.println("失敗!");
-
}
-
}
-
/**
-
* 接口調用 POST
-
*/
-
public static void httpURLConnectionPOST () {
-
try {
-
URL url = new URL(POST_URL);
-
// 將url 以 open方法返回的urlConnection 連接強轉爲HttpURLConnection連接 (標識一個url所引用的遠程對象連接)
-
HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 此時cnnection只是爲一個連接對象,待連接中
-
// 設置連接輸出流爲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-www-form-urlencoded;charset=utf-8");
-
// 建立連接 (請求未開始,直到connection.getInputStream()方法調用時才發起,以上各個參數設置需在此方法之前進行)
-
connection.connect();
-
// 創建輸入輸出流,用於往連接裏面輸出攜帶的參數,(輸出內容爲?後面的內容)
-
DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
-
String app_key = "app_key="+ URLEncoder.encode("4f7bf8c8260124e6e9c6bf094951a111", "utf-8"); // 已修改【改爲錯誤數據,以免信息泄露】
-
String agt_num = "&agt_num="+ URLEncoder.encode("10111", "utf-8"); // 已修改【改爲錯誤數據,以免信息泄露】
-
String pid = "&pid="+ URLEncoder.encode("BLZXA150401111", "utf-8"); // 已修改【改爲錯誤數據,以免信息泄露】
-
String departid = "&departid="+ URLEncoder.encode("10007111", "utf-8"); // 已修改【改爲錯誤數據,以免信息泄露】
-
String install_lock_name = "&install_lock_name="+ URLEncoder.encode("南天大門", "utf-8");
-
String install_address = "&install_address="+ URLEncoder.encode("北京育新", "utf-8");
-
String install_gps = "&install_gps="+ URLEncoder.encode("116.350888,40.011001", "utf-8");
-
String install_work = "&install_work="+ URLEncoder.encode("小李", "utf-8");
-
String install_telete = "&install_telete="+ URLEncoder.encode("13000000000", "utf-8");
-
String intall_comm = "&intall_comm="+ URLEncoder.encode("一切正常", "utf-8");
-
// 格式 parm = aaa=111&bbb=222&ccc=333&ddd=444
-
String parm = app_key+ agt_num+ pid+ departid+ install_lock_name+ install_address+ install_gps+ install_work+ install_telete+ intall_comm;
-
// 將參數輸出到連接
-
dataout.writeBytes(parm);
-
// 輸出完成後刷新並關閉流
-
dataout.flush();
-
dataout.close(); // 重要且易忽略步驟 (關閉流,切記!)
-
// System.out.println(connection.getResponseCode());
-
// 連接發起請求,處理服務器響應 (從連接獲取到輸入流幷包裝爲bufferedReader)
-
BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
-
String line;
-
StringBuilder sb = new StringBuilder(); // 用來存儲響應數據
-
// 循環讀取流,若不到結尾處
-
while ((line = bf.readLine()) != null) {
-
// sb.append(bf.readLine());
-
sb.append(line).append(System.getProperty("line.separator"));
-
}
-
bf.close(); // 重要且易忽略步驟 (關閉流,切記!)
-
connection.disconnect(); // 銷燬連接
-
System.out.println(sb.toString());
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
public static void main(String[] args) {
-
// httpURLConectionGET();
-
httpURLConnectionPOST();
-
}
-
}
只使用了POST請求方法,GET沒有用,爲了保證代碼完整性所以沒有刪除GET請求代碼
返回結果:
-
{
-
"status" : "fail",
-
"code" : "ERR001",
-
"msg" : "商戶10111不存在"
-
}