• RestTemplateUtils


    import com.alibaba.fastjson.JSONObject;
    import com.ruoyi.common.core.constant.Constants;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicHeader;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    import org.springframework.http.*;
    import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.client.RestTemplate;

    import javax.net.ssl.*;
    import java.io.*;
    import java.net.ConnectException;
    import java.net.SocketTimeoutException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.security.cert.X509Certificate;
    import java.util.Map;

    /**
    * @Description: 调用第三方接口通用类
    * @Author: liuzhifeng
    * @CreateDate: 2020/9/15 9:40
    * @UpdateUser: liuzhifeng
    * @UpdateDate: 2020/9/15 9:40
    * @UpdateRemark: 修改内容
    * @Version: 1.0
    */
    @Slf4j
    public class RestTemplateUtils{
    public static final RestTemplate REST_TEMPLATE;
    /**
    * json
    */
    private static final HttpHeaders HEADERSJ;
    /**
    * form-data
    */
    private static final HttpHeaders HEADERSF;


    static {
    HttpComponentsClientHttpRequestFactory httpRequestFactory =
    new HttpComponentsClientHttpRequestFactory(HttpClientBuilder.create()
    .setMaxConnTotal(200)
    .setMaxConnPerRoute(100)
    .build());
    httpRequestFactory.setConnectionRequestTimeout(100000);
    httpRequestFactory.setConnectTimeout(100000);
    httpRequestFactory.setReadTimeout(100000);
    REST_TEMPLATE = new RestTemplate(httpRequestFactory);

    HEADERSJ = new HttpHeaders();
    HEADERSJ.setContentType(MediaType.APPLICATION_JSON_UTF8);

    HEADERSF = new HttpHeaders();
    HEADERSF.add("Content-Type", MediaType.APPLICATION_FORM_URLENCODED_VALUE);
    }

    public static String get(String url) {
    return REST_TEMPLATE.getForObject(url, String.class);
    }

    public static String request(String url, HttpMethod method) {
    return REST_TEMPLATE.exchange(url,
    method,
    new HttpEntity<String>(HEADERSJ),
    String.class).getBody();
    }

    /**
    * header为:json
    *
    * @param url
    * @param requestParams
    * @return
    * @throws Exception
    */
    public static String postForJSON(String url, Object requestParams) throws Exception {
    HttpEntity<Object> formEntity =
    new HttpEntity<>(JSONObject.toJSONString(requestParams), HEADERSJ);
    String responseJson;
    try {
    responseJson = REST_TEMPLATE.postForObject(url, formEntity, String.class);
    } catch (Exception e) {
    throw e;
    }
    return responseJson;
    }

    /**
    * post表单请求
    *
    * @param url
    * @param map
    * @return
    */
    public static String postFormData(String url, Map<String, String> map) {
    MultiValueMap<String, String> reqMap = new LinkedMultiValueMap<>();
    for (Map.Entry<String, String> entry : map.entrySet()) {
    reqMap.add(entry.getKey(), entry.getValue());
    }
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    String res;
    try {
    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(reqMap, headers);
    ResponseEntity<String> response = REST_TEMPLATE.postForEntity(url, request, String.class);
    res = response.getBody();
    } catch (Exception e) {
    throw e;
    }
    return res;
    }

    /**
    * header为:form-data
    *
    * @param url
    * @param requestParams
    * @return
    * @throws Exception
    */
    public static JSONObject postForForm(String url, Map<String, ? extends Object> requestParams) throws Exception {
    LinkedMultiValueMap body = new LinkedMultiValueMap();
    for (String key : requestParams.keySet()) {
    body.add(key, requestParams.get(key));
    }
    HttpEntity<String> entity = new HttpEntity(body, HEADERSF);
    JSONObject responseJson;
    try {
    responseJson = REST_TEMPLATE.postForObject(url, entity, JSONObject.class);
    } catch (Exception e) {
    throw e;
    }
    return responseJson;
    }


    /**
    * 发送post请求
    * @param url 路径
    * @param jsonObject 参数(json类型)
    * @param encoding 编码格式
    * @return
    * @throws IOException
    */
    public static String sendjsonPost(String url, JSONObject jsonObject, String encoding) throws Exception, IOException{
    String body = "";

    //创建httpclient对象
    CloseableHttpClient client = HttpClients.createDefault();
    //创建post方式请求对象
    HttpPost httpPost = new HttpPost(url);

    //装填参数
    StringEntity s = new StringEntity(jsonObject.toString(), "utf-8");
    s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
    "application/json"));
    //设置参数到请求对象中
    httpPost.setEntity(s);
    System.out.println("请求地址:"+url);
    // System.out.println("请求参数:"+nvps.toString());

    //设置header信息
    //指定报文头【Content-type】、【User-Agent】
    // httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
    httpPost.setHeader("Content-type", "application/json");
    httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

    //执行请求操作,并拿到结果(同步阻塞)
    CloseableHttpResponse response = client.execute(httpPost);
    //获取结果实体
    org.apache.http.HttpEntity entity = response.getEntity();
    if (entity != null) {
    //按指定编码转换结果实体为String类型
    body = EntityUtils.toString(entity, encoding);
    }
    EntityUtils.consume(entity);
    //释放链接
    response.close();
    return body;
    }


    /**
    * 向指定 URL 发送GET方法的请求
    *
    * @param url 发送请求的 URL
    * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    * @return 所代表远程资源的响应结果
    */
    public static String sendGet(String url, String param)
    {
    return sendGet(url, param, Constants.UTF8);
    }

    /**
    * 向指定 URL 发送GET方法的请求
    *
    * @param url 发送请求的 URL
    * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    * @param contentType 编码类型
    * @return 所代表远程资源的响应结果
    */
    public static String sendGet(String url, String param, String contentType)
    {
    StringBuilder result = new StringBuilder();
    BufferedReader in = null;
    try
    {
    String urlNameString = url + "?" + param;
    log.info("sendGet - {}", urlNameString);
    URL realUrl = new URL(urlNameString);
    URLConnection connection = realUrl.openConnection();
    connection.setRequestProperty("accept", "*/*");
    connection.setRequestProperty("connection", "Keep-Alive");
    connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    connection.connect();
    in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
    String line;
    while ((line = in.readLine()) != null)
    {
    result.append(line);
    }
    log.info("recv - {}", result);
    }
    catch (ConnectException e)
    {
    log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
    }
    catch (SocketTimeoutException e)
    {
    log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
    }
    catch (IOException e)
    {
    log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
    }
    catch (Exception e)
    {
    log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
    }
    finally
    {
    try
    {
    if (in != null)
    {
    in.close();
    }
    }
    catch (Exception ex)
    {
    log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
    }
    }
    return result.toString();
    }

    /**
    * 向指定 URL 发送POST方法的请求
    *
    * @param url 发送请求的 URL
    * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    * @return 所代表远程资源的响应结果
    */
    public static String sendPost(String url, String param)
    {
    PrintWriter out = null;
    BufferedReader in = null;
    StringBuilder result = new StringBuilder();
    try
    {
    String urlNameString = url;
    log.info("sendPost - {}", urlNameString);
    URL realUrl = new URL(urlNameString);
    URLConnection conn = realUrl.openConnection();
    conn.setRequestProperty("accept", "*/*");
    conn.setRequestProperty("connection", "Keep-Alive");
    conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    conn.setRequestProperty("Accept-Charset", "utf-8");
    conn.setRequestProperty("contentType", "utf-8");
    conn.setDoOutput(true);
    conn.setDoInput(true);
    out = new PrintWriter(conn.getOutputStream());
    out.print(param);
    out.flush();
    in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
    String line;
    while ((line = in.readLine()) != null)
    {
    result.append(line);
    }
    log.info("recv - {}", result);
    }
    catch (ConnectException e)
    {
    log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
    }
    catch (SocketTimeoutException e)
    {
    log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
    }
    catch (IOException e)
    {
    log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
    }
    catch (Exception e)
    {
    log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
    }
    finally
    {
    try
    {
    if (out != null)
    {
    out.close();
    }
    if (in != null)
    {
    in.close();
    }
    }
    catch (IOException ex)
    {
    log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
    }
    }
    return result.toString();
    }

    public static String sendSSLPost(String url, String param)
    {
    StringBuilder result = new StringBuilder();
    String urlNameString = url + "?" + param;
    try
    {
    log.info("sendSSLPost - {}", urlNameString);
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
    URL console = new URL(urlNameString);
    HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
    conn.setRequestProperty("accept", "*/*");
    conn.setRequestProperty("connection", "Keep-Alive");
    conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    conn.setRequestProperty("Accept-Charset", "utf-8");
    conn.setRequestProperty("contentType", "utf-8");
    conn.setDoOutput(true);
    conn.setDoInput(true);

    conn.setSSLSocketFactory(sc.getSocketFactory());
    conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
    conn.connect();
    InputStream is = conn.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String ret = "";
    while ((ret = br.readLine()) != null)
    {
    if (ret != null && !ret.trim().equals(""))
    {
    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
    }
    }
    log.info("recv - {}", result);
    conn.disconnect();
    br.close();
    }
    catch (ConnectException e)
    {
    log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
    }
    catch (SocketTimeoutException e)
    {
    log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
    }
    catch (IOException e)
    {
    log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
    }
    catch (Exception e)
    {
    log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
    }
    return result.toString();
    }

    private static class TrustAnyTrustManager implements X509TrustManager
    {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType)
    {
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType)
    {
    }

    @Override
    public X509Certificate[] getAcceptedIssuers()
    {
    return new X509Certificate[] {};
    }
    }

    private static class TrustAnyHostnameVerifier implements HostnameVerifier
    {
    @Override
    public boolean verify(String hostname, SSLSession session)
    {
    return true;
    }
    }

    }

    再牛逼的梦想,也抵不住我傻逼似的坚持!别在该奋斗的年纪,贪图安逸。 今天多学一些知识,明天开发的速度就更快一下。后天你就会变得更好。
  • 相关阅读:
    C语言中 指针和数组
    C语言中 指针与结构体
    void指针、NULL指针和未初始化指针
    C语言中 指针、引用和取值

    别--------
    快速开发 jQuery 插件的 10 大技巧(转)
    采用预取(Prefetch)来加速你的网站(转)
    HttpWatch工具简介及使用技巧(转)
    iScroll框架的使用和修改
  • 原文地址:https://www.cnblogs.com/LowKeyCXY/p/RestTemplateUtils.html
Copyright © 2020-2023  润新知