我们在请求三方提供接口,我们可以通过简单的访问,获取到对应的信息:
/**
* <b>Function: </b> todo
*
* @program: Post请求
* @Package: com.kingbal.king.dmp
* @author: dingcho
* @date: 2024/06/19
* @version: 1.0
* @Copyright: 2024 www.kingbal.com Inc. All rights reserved.
*/
@Slf4j
public class BaseTest {
//正式环境
private static final String WANG_ACCOUNT = "XXXXW";
//测试
private static final String TEST_WANG_ACCOUNT = "TESTXXXXW";
public static String doPost(Map<String, String> params, String desc) {
String url = BASE_URL;
CloseableHttpResponse response = null;
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
try {
String userName = HttpsUtils.IS_TEST ? TEST_WANG_ACCOUNT : WANG_ACCOUNT;
params.put("UserName", userName);
// 大部分都有加密
String sign = HttpsUtils.getSign(params);
params.put("Sign", sign);
httpPost.addHeader("Content-type", "application/x-www-form-urlencoded");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
for (Map.Entry<String, String> map : params.entrySet()) {
nameValuePairs.add(new BasicNameValuePair(map.getKey(), map.getValue()));
}
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
InputStream contents = httpPost.getEntity().getContent();
InputStreamReader inputStreamReader = new InputStreamReader(contents, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String readLine = bufferedReader.readLine();
URLDecoder.decode(readLine, "UTF-8");
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String content = "";
if (entity != null) {
content = EntityUtils.toString(entity, "UTF-8");
log.info("\n" + "请求地址 >>> " + url
+ "\n" + "描述 >>> " + desc
+ "\n" + "参数 >>> " + JSONUtil.parse(params)
+ "\n" + "返回值 >>> " + content);
return content;
}
} catch (Exception e) {
e.printStackTrace();
}
return "获取数据错误";
}
}
当请求接口需要加密的时候我们需要生成加密串:
/**
* 获取加密排序、加密
*
* @param params
* @return
*/
public static String getSign(Map<String, String> params) {
Collection<String> keySet = params.keySet();
List<String> list = new ArrayList<>(keySet);
Collections.sort(list);
StringBuffer sbf = new StringBuffer();
for (Object key : list) {
sbf.append(params.get(key));
}
String sortStr = sbf.toString() + (IS_TEST ? TEST_PRIVATE_KEY : PRIVATE_KEY);
log.error(sortStr);
String result = MD5Utils.encrypt(sortStr);
log.error(result);
return result;
}
MD5Utils算法:
@Slf4j
public class MD5Utils {
/**
* 获取指定字符串的md5值
* @param dataStr 明文
* @return String
*/
public static String encrypt(String dataStr) {
try {
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(dataStr.getBytes("UTF8"));
byte[] s = m.digest();
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length; i++) {
result.append(Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00).substring(6));
}
return result.toString();
}
catch (Exception e) {
log.error("error", e);
}
return "";
}
}