|
@@ -74,7 +74,7 @@ public class APIVisit {
|
|
return out;
|
|
return out;
|
|
}
|
|
}
|
|
// 访问api
|
|
// 访问api
|
|
- public static void visit(String url, String token, String secret, Boolean enc, Map<String, String> param) {
|
|
|
|
|
|
+ public static void visit_by_token(String url, String token, String secret, Boolean enc, Map<String, String> param) {
|
|
|
|
|
|
try {
|
|
try {
|
|
|
|
|
|
@@ -86,7 +86,7 @@ public class APIVisit {
|
|
JSONObject jobj = JSONObject.fromObject(param);
|
|
JSONObject jobj = JSONObject.fromObject(param);
|
|
data = jobj.toString();
|
|
data = jobj.toString();
|
|
data = AesEcbEncrypt(data, secret);
|
|
data = AesEcbEncrypt(data, secret);
|
|
- uriBuilder.setParameter("data", data);
|
|
|
|
|
|
+ uriBuilder.setParameter("encrypt_data", data);
|
|
} else {
|
|
} else {
|
|
param.entrySet().forEach(item -> {
|
|
param.entrySet().forEach(item -> {
|
|
uriBuilder.setParameter(item.getKey(), item.getValue());
|
|
uriBuilder.setParameter(item.getKey(), item.getValue());
|
|
@@ -124,6 +124,85 @@ public class APIVisit {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static String md5(String sSrc) {
|
|
|
|
+
|
|
|
|
+ byte[] secretBytes = null;
|
|
|
|
+ try {
|
|
|
|
+ MessageDigest md = MessageDigest.getInstance("MD5");
|
|
|
|
+ md.update(sSrc.getBytes());
|
|
|
|
+ secretBytes = md.digest();
|
|
|
|
+ } catch (NoSuchAlgorithmException e) {
|
|
|
|
+ System.out.println(e.toString());
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字
|
|
|
|
+ Integer l = md5code.length();
|
|
|
|
+ for (int i = 0; i < 32 - l; i++) {
|
|
|
|
+ md5code = "0" + md5code;
|
|
|
|
+ }
|
|
|
|
+ return md5code;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String getSign(String ts, String appKey, String appSecrect) {
|
|
|
|
+ String s = appKey + appSecrect + ts;
|
|
|
|
+ s = md5(s);
|
|
|
|
+ return s;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static void visit_by_sign(String url, String appkey, String secret, Boolean enc, Map<String, String> param) {
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+
|
|
|
|
+ // http 设置和请求
|
|
|
|
+ HttpClient client = HttpClientBuilder.create().build();
|
|
|
|
+ URIBuilder uriBuilder = new URIBuilder(url);
|
|
|
|
+ if (enc) {
|
|
|
|
+ String data = "";
|
|
|
|
+ JSONObject jobj = JSONObject.fromObject(param);
|
|
|
|
+ data = jobj.toString();
|
|
|
|
+ data = AesEcbEncrypt(data, secret);
|
|
|
|
+ uriBuilder.setParameter("encrypt_data", data);
|
|
|
|
+ } else {
|
|
|
|
+ param.entrySet().forEach(item -> {
|
|
|
|
+ uriBuilder.setParameter(item.getKey(), item.getValue());
|
|
|
|
+ System.out.println("key:" + item.getKey() + ",vaule:" + item.getValue());
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ String ts = Long.toString(System.currentTimeMillis());
|
|
|
|
+ String sign = getSign(ts, appkey, secret);
|
|
|
|
+
|
|
|
|
+ URI reqUrl = uriBuilder.build();
|
|
|
|
+ HttpGet request = new HttpGet(reqUrl);
|
|
|
|
+ request.setHeader("appkey", appkey);
|
|
|
|
+ request.setHeader("timestamp", ts);
|
|
|
|
+ request.setHeader("sign", sign);
|
|
|
|
+
|
|
|
|
+ HttpResponse response = client.execute(request);
|
|
|
|
+
|
|
|
|
+ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
|
|
|
|
+ String str = EntityUtils.toString(response.getEntity());
|
|
|
|
+ System.out.println(str);
|
|
|
|
+ JSONObject obj = JSONObject.fromObject(str);
|
|
|
|
+
|
|
|
|
+ // 数据是否解密
|
|
|
|
+ if (obj.containsKey("data")) {
|
|
|
|
+ String content = obj.get("data").toString();
|
|
|
|
+ if (enc) {
|
|
|
|
+ String plaintext = AesEcbDecrypt(content, secret);
|
|
|
|
+ System.out.printf("解密后:%s\n", plaintext);
|
|
|
|
+ } else {
|
|
|
|
+ System.out.printf("不需解密:%s\n", content);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
public static String getToken(String tokenUrl, String user, String password) {
|
|
public static String getToken(String tokenUrl, String user, String password) {
|
|
try {
|
|
try {
|
|
|
|
|
|
@@ -162,30 +241,37 @@ public class APIVisit {
|
|
public static void main(String[] args) throws Exception {
|
|
public static void main(String[] args) throws Exception {
|
|
// 配置请联系运营商获取
|
|
// 配置请联系运营商获取
|
|
// 实际接口url
|
|
// 实际接口url
|
|
- String apiUrl = "";
|
|
|
|
|
|
+ String apiUrl = "http://127.0.0.1:41002/api/v1/query/2001";
|
|
// token url
|
|
// token url
|
|
- String tokenUrl = "";
|
|
|
|
|
|
+ String tokenUrl = "http://127.0.0.1:41002/api/v1/token";
|
|
// api 用户名和密码用于获取token
|
|
// api 用户名和密码用于获取token
|
|
- String user = "";
|
|
|
|
- String password = "";
|
|
|
|
|
|
+ String user = "529db83441acff61a054eba562185515";
|
|
|
|
+ String password = "DMh7lbyv";
|
|
// 密钥用于加密数据(非加密接口可不用)
|
|
// 密钥用于加密数据(非加密接口可不用)
|
|
- String appSecret = "";
|
|
|
|
|
|
+ String secret = "1749f2a7019db090ca7c9cc69e64033c";
|
|
// 是否加密
|
|
// 是否加密
|
|
Boolean is_enc = true;
|
|
Boolean is_enc = true;
|
|
|
|
+ Boolean use_token = false;
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
- // 获取token
|
|
|
|
- String token = getToken(tokenUrl, user, password);
|
|
|
|
- if (token == "") {
|
|
|
|
- System.out.println("token is empty");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
// 调用接口
|
|
// 调用接口
|
|
HashMap<String, String> param = new HashMap<>();
|
|
HashMap<String, String> param = new HashMap<>();
|
|
// 接口参数根据实际api接口填写
|
|
// 接口参数根据实际api接口填写
|
|
- param.put("", "");
|
|
|
|
|
|
+ param.put("plate_no", "川Y01M21");
|
|
|
|
+ param.put("plate_type", "02");
|
|
|
|
+ param.put("owner", "吴军");
|
|
|
|
|
|
- visit(apiUrl, token, appSecret, is_enc, param);
|
|
|
|
- }
|
|
|
|
|
|
+ if (use_token) {
|
|
|
|
+ // 获取token
|
|
|
|
+ String token = getToken(tokenUrl, user, password);
|
|
|
|
+ if (token == "") {
|
|
|
|
+ System.out.println("token is empty");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ visit_by_token(apiUrl, token, secret, is_enc, param);
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ visit_by_sign(apiUrl, user, secret, is_enc, param);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+}
|