RsRequestUtils.java 4.23 KB
package com.genersoft.iot.vmp.vmanager.util;

import cn.hutool.http.HttpUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.security.MessageDigest;
import java.util.*;

/**
 * RS 接口调用工具类
 * Created by panzhao on 2017/8/2.
 */
public class RsRequestUtils {

    private static String password;

    static {
        password = "f8267b7bc5e51994bab57c8e8884f203609d1dc3";
    }

    static Logger logger = LoggerFactory.getLogger(RsRequestUtils.class);

    /**
     * 生成参数字符串
     *
     * @return
     */
    public static String getParams() {
        String rs = "";
        try {
            String nonce = getNonce(6);
            long t = System.currentTimeMillis();

            Map<String, String> map = new HashMap<>();
            map.put("password", password);
            map.put("timestamp", t + "");
            map.put("nonce", nonce);

            String sign = getSHA1(map);

            rs = "?password=" + password + "&timestamp=" + t + "&nonce=" + nonce + "&sign=" + sign;
        } catch (Exception e) {
            logger.error("", e);
        }
        return rs;
    }

    /**
     * 生成参数字符串
     *
     * @return
     */
    public static String getParams(Map<String, String> paramMap) {
        StringBuilder rs = new StringBuilder("?");
        try {
            String nonce = getNonce(6);
            long t = System.currentTimeMillis();

            paramMap.put("password", password);
            paramMap.put("timestamp", t + "");
            paramMap.put("nonce", nonce);

            String sign = getSHA1(paramMap);
            paramMap.put("sign", sign);

            Set<String> ks = paramMap.keySet();
            for (String k : ks) {
                rs.append(k + "=" + paramMap.get(k) + "&");
            }
            rs.deleteCharAt(rs.length() - 1);
        } catch (Exception e) {
            logger.error("", e);
        }
        return rs.toString();
    }

    /**
     * 生成随机字符串
     *
     * @return
     */
    public static String getNonce(int length) {
        String base = "abcdefghijklmnopqrstuvwxyz0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }

    private static String getSHA1(Map<String, String> map) throws Exception {
        try {
            String[] array = new String[map.size()];
            map.values().toArray(array);
            StringBuffer sb = new StringBuffer();
            // 字符串排序
            Arrays.sort(array);
            for (int i = 0; i < array.length; i++) {
                sb.append(array[i]);
            }
            String str = sb.toString();
            // SHA1签名生成
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(str.getBytes());
            byte[] digest = md.digest();
            StringBuffer hexStr = new StringBuffer();
            String shaHex;
            for (int i = 0; i < digest.length; i++) {
                shaHex = Integer.toHexString(digest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexStr.append(0);
                }
                hexStr.append(shaHex);
            }
            return hexStr.toString();
        } catch (Exception e) {
            throw e;
        }
    }

    public static void main(String[] args) {
//        StringBuilder rs = null;
//        try {
//            rs = HttpClientUtils.get("http://106.14.30.180:9089/webservice/rest/schedule_real/execs?password=e126853c7f6f43b4857fa8dfe3b28b5d90be9e68&timestamp=1587101390953&nonce=z5uefd&sign=cbdc60ec931cdf8f4b45104ddd6809a16f82e76f");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        String lineInfoUrl = "http://58.34.47.74:9089/webservice/rest/line/company/55" + RsRequestUtils.getParams();
        String lineInfoJson = HttpUtil.get(lineInfoUrl);
        System.out.println(lineInfoUrl);
//        System.out.println(rs.toString());
//        List<ScheduleRealInfo> list = JSONArray.parseArray(rs.toString(), ScheduleRealInfo.class);
//        System.out.println(list.size());

    }
}