使用HttpClient封装工具类调用第三方接口

    技术2022-07-17  67

    BizServerRestUtils.java

    package jiangdu.fire.util; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import org.apache.http.entity.StringEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.IOException; import java.nio.charset.Charset; import java.util.*; @Component public class BizServerRestUtils { private static final Logger log = LoggerFactory.getLogger(BizServerRestUtils.class); public static <T> T doExecute(String url,Object requestParam,Class<T> clazz) throws Exception { String resultText = null; try { resultText = NetUtils.post(url, getStringEntity(requestParam), NetUtils.getHttpClient(),getHeader()); //log.debug("return {}", resultText); } catch (IOException e) { e.printStackTrace(); // log.error("请求异常"+e.getMessage(),e); throw e; } return null; } public static String doExecute2String(String url, Object requestParam) throws Exception { String resultText = null; try { resultText = NetUtils.post(url, getStringEntity(requestParam), NetUtils.getHttpClient(), getHeader()); log.debug("return {}", resultText); } catch (IOException e) { e.printStackTrace(); //log.error("请求异常" + e.getMessage(), e); throw e; } return resultText; } public static String doExecute2String(String url, Object requestParam, String jssesionId) throws Exception { String resultText = null; try { resultText = NetUtils.post(url, getStringEntity(requestParam), NetUtils.getHttpClient(), getHeader(jssesionId)); //log.debug("return {}", resultText); } catch (IOException e) { e.printStackTrace(); //log.error("请求异常" + e.getMessage(), e); throw e; } return resultText; } public static <T> List<T> doExecuteArray(String url, Object requestParam, Class<T> clazz) throws Exception { String resultText = null; try { resultText = NetUtils.post(url, getStringEntity(requestParam), NetUtils.getHttpClient(),getHeader()); //log.debug("return {}", resultText); } catch (IOException e) { e.printStackTrace(); // log.error("请求异常"+e.getMessage(),e); throw e; } return null; } private static StringEntity getStringEntity(Object requestParam){ String jsonParams = JSONObject.toJSONString(requestParam); StringEntity stringEntity = new StringEntity(jsonParams, Charset.forName("UTF-8")); stringEntity.setContentEncoding("UTF-8"); stringEntity.setContentType("application/json");//发送json数据需要设置contentType return stringEntity; } private static Map<String,String> getHeader(){ // 获取随机数和签名 String result = ""; String sign = ""; String nonceStr = ""; SortedMap<String,String> treeMap = new TreeMap<String, String>(); treeMap.put("appId","dj1001"); nonceStr = StringUtils.remove(UUID.randomUUID().toString(), "-"); treeMap.put("nonceStr",nonceStr);//随机数 try { sign = SignUtils.encodeSign(treeMap,"55DEF8A9F4374B319EF8A9F437AB313E");//key为密钥 } catch (Exception e) { e.printStackTrace(); } SortedMap<String,String> maps = new TreeMap<String, String>(); maps.put("appId","dj1001"); maps.put("nonceStr",nonceStr); maps.put("sign",sign); /*log.info("requestMaps:"+maps); log.info("sign:"+sign);*/ Map<String,String> header = new HashMap<String, String>(); header.put("appId","dj1001"); header.put("nonceStr",nonceStr); header.put("sign",sign); return header; } private static Map<String, String> getHeader(String jssesionId) { // 获取随机数和签名 String result = ""; String sign = ""; String nonceStr = ""; SortedMap<String,String> treeMap = new TreeMap<String, String>(); treeMap.put("appId","dj1001"); nonceStr = StringUtils.remove(UUID.randomUUID().toString(), "-"); treeMap.put("nonceStr",nonceStr);//随机数 try { sign = SignUtils.encodeSign(treeMap,"55DEF8A9F4374B319EF8A9F437AB313E");//key为密钥 } catch (Exception e) { e.printStackTrace(); } SortedMap<String, String> maps = new TreeMap<String, String>(); maps.put("appId", "dj1001"); maps.put("nonceStr", nonceStr); maps.put("sign", sign); /*log.info("requestMaps:" + maps); log.info("sign:" + sign);*/ Map<String, String> header = new HashMap<String, String>(); header.put("appId", "dj1001"); header.put("nonceStr", nonceStr); header.put("sign", sign); header.put("jssesionId", jssesionId); return header; } }

    NetUtils.java

    package jiangdu.fire.util; import org.apache.http.HttpEntity; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; import java.io.IOException; import java.net.URISyntaxException; import java.security.Security; import java.util.Map; public class NetUtils { private static final int DEFAULT_MAX_TOTAL_CONNECTIONS = 200; private static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE = 300; private static final CloseableHttpClient client; private static String charsetEncoding = "utf-8"; public NetUtils() { } public static void setCharsetEncoding(String charsetEncoding) { charsetEncoding = charsetEncoding; } public static HttpClient getHttpClient() { return client; } public static String get(String url) throws URISyntaxException, IOException { CloseableHttpResponse response = client.execute(new HttpGet(url)); return EntityUtils.toString(response.getEntity(), charsetEncoding); } public static String post(String url, HttpEntity httpEntity, HttpClient httpClient, Map<String,String> header) throws IOException { if(httpClient == null) { httpClient = client; } HttpPost post = new HttpPost(url); if(header!=null && header.size() >0){ for(String key : header.keySet()){ post.addHeader(key,header.get(key)); } } post.setEntity(httpEntity); return EntityUtils.toString(((HttpClient)httpClient).execute(post).getEntity(), charsetEncoding); } public static String post(String url, HttpEntity httpEntity) throws IOException { return post(url, (HttpEntity)httpEntity, (HttpClient)null,null); } public static String post(String url, String data, String contentType, HttpClient httpClient) throws IOException { return post(url, (byte[])data.getBytes(charsetEncoding), contentType, httpClient); } public static String post(String url, byte[] data, String contentType, HttpClient httpClient) throws IOException { ByteArrayEntity se = new ByteArrayEntity(data); se.setContentEncoding(new BasicHeader("Content-Encoding", charsetEncoding)); se.setContentType(new BasicHeader("Content-Type", contentType)); return post(url, (HttpEntity)se, (HttpClient)httpClient,null); } public static String post(String url, String data, String contentType) throws IOException { return post(url, (byte[])data.getBytes(charsetEncoding), (String)contentType); } public static String post(String url, byte[] data, String contentType) throws IOException { return post(url, (byte[])data, contentType, (HttpClient)null); } static { System.setProperty("jsse.enableSNIExtension", "false"); Security.setProperty("networkaddress.cache.ttl", "0"); RequestConfig config = RequestConfig.custom().setSocketTimeout(30000).setConnectionRequestTimeout(30000).setConnectTimeout(5000).build(); client = HttpClientBuilder.create().setDefaultRequestConfig(config).setMaxConnTotal(200).setHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).setMaxConnPerRoute(300).disableAutomaticRetries().build(); } }

    使用工具类的话需要添加依赖:

    <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.23</version> </dependency>
    Processed: 0.017, SQL: 9