该部分接口说明位于 获取用户基本信息的方法
使用方法
完成整个请求最重要的就是两点:
请求头中添加 Accept:application/json
构造形如 access_token=SXxH1rdIE1oYRumNVndqxCm88dk6Ab3v&plugin_id=zupke21y×tamp=1635342977&sign=16f496645b8eb259baada05951bd0d0cd985ea685152f0de46da47684b745c51
这个形式的请求参数
对于第一点很简单就是在进行get请求的时候加入请求头。
第二点,在原文中描述的三个步骤中的1和2的一步其实就是把各个值按 access_token plugin_id timestamp 的顺序进行拼接成 access_token=SXxH1rdIE1oYRumNVndqxCm88dk6Ab3v&plugin_id=zupke21y×tamp=1635342977
这种形式(不包含sign)。拼接完以后,对其进行HmacSHA256加密,其中原文中加密用到的数据就是开发者工具里面的对应的插件右上角3个小点里面的重置密钥的数据。最后将加密完的数据再拼接到上面的参数后面即可。
最后得到总的入参就是access_token=SXxH1rdIE1oYRumNVndqxCm88dk6Ab3v&plugin_id=zupke21y×tamp=1635342977&sign=16f496645b8eb259baada05951bd0d0cd985ea685152f0de46da47684b745c51
请求的URL就是https://open.u-tools.cn/baseinfo?access_token=SXxH1rdIE1oYRumNVndqxCm88dk6Ab3v&plugin_id=zupke21y×tamp=1635342977&sign=16f496645b8eb259baada05951bd0d0cd985ea685152f0de46da47684b745c51
Java实现
http请求工具类
/**
*
* @description: 进行HTTP请求的工具类
*/
public class HttpUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtil.class);
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
LOGGER.info("请求的URL为:" + urlNameString);
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("Accept", "application/json");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
LOGGER.info("发送GET请求出现异常!" + e);
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
}
加密工具和获取精确到秒的时间戳的方法
/**
* 获取精确到秒的时间戳
*
* @param date
*
* @return
*
*/
public static String getSecondTimestamp(Date date){
if (null == date) {
return "";
}
String timestamp = String.valueOf(date.getTime());
int length = timestamp.length();
if (length > 3) {
return timestamp.substring(0,length-3);
} else {
return "";
}
}
/**
* HMACSHA256加密
*
* @param data
* @param key
*
* @return
*
*/
public static String HMACSHA256(String data, String key) {
StringBuilder sb = null;
try{
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
sb = new StringBuilder();
for (byte item : array) {
sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
}
}catch (Exception e){
LOGGER.error("错误!"+e);
}
return sb.toString().toUpperCase();
}
请求参数对应实体类
public class BaseinfoDto implements Serializable {
/**
* 插件ID
* */
private String plugin_id;
/**
* uTools 用户的 access_token
* */
private String access_token;
/**
* 时间戳(秒),误差需小于 10 分钟
* */
private String timestamp;
/**
* 签名
* */
private String sign;
/**
* getter and setter
* */
}
请求
public static void main(String[] args) {
BaseinfoDto baseinfoDto = new BaseinfoDto();
baseinfoDto.setPlugin_id("zupke21y");
baseinfoDto.setAccess_token("SXxH1rdIE1oYRumNVndqxCm88dk6Ab3v");
baseinfoDto.setTimestamp(getSecondTimestamp(new Date()));
//构造请求参数
StringBuffer param = new StringBuffer();
param.append("access_token=");
param.append(baseinfoDto.getAccess_token());
param.append("&plugin_id=");
param.append(baseinfoDto.getPlugin_id());
param.append("×tamp=");
param.append(baseinfoDto.timestamp);
System.out.println(param.toString());
String sign = HMACSHA256(param.toString(),"UQO05su8px1V3RyWl1ziLrY6w9x12UYp");
param.append("&sign=");
param.append(sign);
System.out.println(param.toString());
//返回的结果
String result = HttpUtil.sendGet("https://open.u-tools.cn/baseinfo",param.toString());
}