调用企查查第三方Api:企业工商模糊搜索

1、首先需要设置token,API中要求token的格式为key+Timespan+SecretKey组成的32位md5加密的大写字符串,可以调用hutool里的SecureUtil工具类,但是生成的是小写,我们转下大写就好。token要放在http的header 头中,hutool里的get方法没有办法把信息写进header里面,所以在网上找了一个带参数的get的方法

调用企查查第三方Api:企业工商模糊搜索_第1张图片

权限验证所提到的key,SecretKey都可以在“我的接口”中查询到 

 下面直接上代码!

/**

 * 获取精确到秒的时间戳
 *
 * @return
 */
public static int getSecondTimestamp(Date date) {
    if (null == date) {
        return 0;
    }
    String timestamp = String.valueOf(date.getTime());
    int length = timestamp.length();
    if (length > 3) {
        return Integer.valueOf(timestamp.substring(0, length - 3));
    } else {
        return 0;
    }
}

下面是带着header的get请求方法

/**
 * 带参数的get请求
 *
 * @param url
 * @param
 * @return String
 */
public static String doGet(String url, String token, String timeSpan, Object o) {
    // 创建Httpclient对象
    CloseableHttpClient httpclient = HttpClients.createDefault();

    String resultString = "";
    CloseableHttpResponse response = null;
    try {
        // 创建uri
        URIBuilder builder = new URIBuilder(url);

        URI uri = builder.build();
        // 创建http GET请求
        HttpGet httpGet = new HttpGet(uri);
        //添加header 头
        httpGet.setHeader("Token", token);
        httpGet.setHeader("Timespan", timeSpan);
        // 执行请求
        response = httpclient.execute(httpGet);
        // 判断返回状态是否为200
        if (response.getStatusLine().getStatusCode() == 200) {
            resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (response != null) {
                response.close();
            }
            httpclient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return resultString;
}

public static String doGet(String url, String token, String timeSpan) {
    return doGet(url, token, timeSpan, null);
}

 接着就是调用第三方接口了

public  List<***> identityCheck(String token, String timeStamp, String name) {
    String keyword = name;
 System.out.println("-----------------开始调用--------------->");
    //企业关键字模糊查询
    String url = qichachaUrl + qichachaKey + "&dtype=json" + "&searchKey=" + keyword;
    boolean match = false; //是否匹配
    String result = "";
    List list = new ArrayList<>();
    try {
        result = doGet(url, token, timeStamp);
         System.out.println("请求结果:" + result);
        JSONObject jsonObject = JSONObject.parseObject(result);
        //这里加个判断,避免报空指针异常
        if (Objects.isNull(jsonObject) || Objects.isNull(jsonObject.get("Result"))){
            return new ArrayList<>();
        }else {
               //将查询的数据转换实体类对象
            String result1 = jsonObject.get("Result").toString();
            list = JSONArray.parseArray(result1, ***.class);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
   return list;
}

List是你查询的实体类,name是你要查询的企业名称 ,qichachaUrl 就是你调用的url,就是http://api.qichacha.com/FuzzySearch/GetList,qichachaKey是自己的key,这里没有是因为写在配置文件里面了,可以先使用main方法试试能不能调用成功

 public static void main(String[] args) throws Exception{
       int secondTimestamp = getSecondTimestamp(new Date()); //精确到秒的时间戳 String         time=String.valueOf(secondTimestamp); String token =         SecureUtil.md5(qichachaKey+time+qichachaSecretKey).toUpperCase(); //token:验证加密值(key+Timespan+SecretKey组成的32位md5加密的大写字符串)
        System.out.println(token);

        name="";//你想要查询的企业名称
        identityCheck(token,secondTimestamp+"",name);
    }

返回实体类方法

public List<****> selectList(String name) {
    int secondTimestamp = getSecondTimestamp(new Date()); //精确到秒的时间戳
    String time=String.valueOf(secondTimestamp);
    String token = SecureUtil.md5(qichachaKey+time+qichachaSecretKey).toUpperCase(); //token:验证加密值(key+Timespan+SecretKey组成的32位md5加密的大写字符串)
    List<****> list = identityCheck(token, secondTimestamp + "", name);
    return list;
} 

最后打个写好的包,记录一下,方便自己也方便大家。嘿嘿~ 

你可能感兴趣的:(http,java)