
1、首先需要设置token,API中要求token的格式为key+Timespan+SecretKey组成的32位md5加密的大写字符串,可以调用hutool里的SecureUtil工具类,但是生成的是小写,我们转下大写就好。token要放在http的header 头中,hutool里的get方法没有办法把信息写进header里面,所以在网上找了一个带参数的get的方法
权限验证所提到的key,SecretKey都可以在“我的接口”中查询到
下面直接上代码!
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请求方法
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;
}
最后打个写好的包,记录一下,方便自己也方便大家。嘿嘿~