文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java的http请求工具类HttpClientUtils怎么使用

2023-06-19 10:36

关注

本篇内容主要讲解“java的http请求工具类HttpClientUtils怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java的http请求工具类HttpClientUtils怎么使用”吧!

import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.commons.collections.MapUtils;import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpRequestBase;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.HttpClientConnectionManager;import org.apache.http.conn.socket.ConnectionSocketFactory;import org.apache.http.conn.ssl.AllowAllHostnameVerifier;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.SSLContexts;import org.apache.http.conn.ssl.X509HostnameVerifier;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.springframework.util.CollectionUtils;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.net.SocketTimeoutException;import java.net.URLEncoder;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.Set;public class HttpClientUtils {    private static Log logger = LogFactory.getLog(HttpClientUtils.class);    private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();    private static CloseableHttpClient httpClient = null;    private static final int DEFAULT_MAX_TOTAL_CONNECTION = 1024;    private static final int DEFAULT_MAX_PER_ROUTE = 300;    private static final String DEFAULT_ENCODING = "UTF-8"; // 默认的查询参数及返回结果的字符串编码    private static final String CONTENT_TYPE_TEXT_XML = "application/xml"; // 默认的查询参数及返回结果的字符串编码    private static final String APPLICATION_XML = "text/xml"; // 默认的查询参数及返回结果的字符串编码    private static final int DEFAULT_CONNECTION_TIME_OUT = 60000; // 默认连接超时时间,    // 60秒    private static final int DEFAULT_READ_TIME_OUT = 200000; // 默认响应超时时间, 60秒    public static JSONObject custRespHeader = new JSONObject();    static {        poolingHttpClientConnectionManager.setMaxTotal(DEFAULT_MAX_TOTAL_CONNECTION);        poolingHttpClientConnectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_PER_ROUTE);        httpClient = HttpClients.custom().setConnectionManager(poolingHttpClientConnectionManager).build();    }    private HttpClientUtils() {    }        public static String invokeGet(String url, Map<String, String> params, String encode, int connectTimeout,                                   int readTimeout) {        if (connectTimeout <= 0) {            return null;        }        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeout)                .setConnectTimeout(connectTimeout).setConnectionRequestTimeout(connectTimeout).build();        String responseString;        String requestUrl;        try {            requestUrl = buildRequestUrl(url, params);        } catch (UnsupportedEncodingException e) {            logger.error("encode http get params error, params is " + params, e);            return "";        }        HttpPost httpGet = new HttpPost(requestUrl);        httpGet.setHeader("Connection", "close");        httpGet.setConfig(requestConfig);        responseString = doRequest(httpGet, encode);        return responseString;    }        public static String invokePost(String requestUrl, Map<String, Object> params) {        return invokePost(requestUrl, params, null, null, DEFAULT_ENCODING, DEFAULT_CONNECTION_TIME_OUT,                DEFAULT_READ_TIME_OUT);    }    public static String invokePost(String requestUrl, Map<String, Object> params,Map<String, String> requestHeader) {        return invokePost(requestUrl, params, requestHeader, null, DEFAULT_ENCODING, DEFAULT_CONNECTION_TIME_OUT,                DEFAULT_READ_TIME_OUT);    }        public static String invokePost(String requestUrl, Map<String, String> requestHeader, String requestBody) {        return invokePost(requestUrl, null, requestHeader, requestBody, DEFAULT_ENCODING, DEFAULT_CONNECTION_TIME_OUT,                DEFAULT_READ_TIME_OUT);    }        public static String invokePost(String requestUrl, Map<String, Object> params, Map<String, String> requestHeader,                                    String requestBody, String encode, int connectTimeout, int readTimeout) {        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(readTimeout)                .setConnectTimeout(connectTimeout).setConnectionRequestTimeout(connectTimeout).build();        String responseString;        HttpPost httpPost = new HttpPost(requestUrl);        httpPost.setConfig(requestConfig);        if (MapUtils.isNotEmpty(requestHeader)) {            for (Map.Entry<String, String> entry : requestHeader.entrySet()) {                httpPost.addHeader(entry.getKey(), entry.getValue());            }        }        buildPostParams(httpPost, params, requestBody, encode);        responseString = doRequest(httpPost, encode);        return responseString;    }        private static void buildPostParams(HttpPost httpPost, Map<String, Object> params, String requestBody,                                        String encode) {        try {            if (MapUtils.isNotEmpty(params)) {                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();                for (Map.Entry<String, Object> entry : params.entrySet()) {                    String value = null;                    if (entry.getValue() instanceof String) {                        value = (String) entry.getValue();                    } else {                        value = JSON.toJSONString(entry.getValue());                    }                    nameValuePairs.add(new BasicNameValuePair(entry.getKey(), value));                }                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, encode));            }            if (StringUtils.isNotBlank(requestBody)) {                httpPost.setEntity(new StringEntity(requestBody, encode));            }        } catch (UnsupportedEncodingException e) {            logger.error("HttpClientUtils.buildPostParams error, params = " + params, e);        }    }        private static String doRequest(HttpRequestBase httpRequestBase, String encode) {        String responseString = null;        try {            long start = System.currentTimeMillis();            CloseableHttpResponse response = httpClient.execute(httpRequestBase);            logger.info("HttpClientUtils Begin Invoke: " + httpRequestBase.getURI() + ", cost time "                    + (System.currentTimeMillis() - start) + " ms");            try {                Header[] headers = response.getHeaders("isLogin");                if(headers!=null && headers.length>0){                    custRespHeader.put(headers[0].getName(),headers[0].getValue());                }                HttpEntity entity = response.getEntity();                try {                    if (entity != null) {                        responseString = EntityUtils.toString(entity, encode);                    }                } finally {                    if (entity != null) {                        entity.getContent().close();                    }                }            } catch (Exception e) {                e.printStackTrace();                logger.error(String.format("[HttpClientUtils.doRequest] get response error, url:%s",                        httpRequestBase.getURI()), e);                responseString = "";            } finally {                if (response != null) {                    response.close();                }            }        } catch (SocketTimeoutException e) {            e.printStackTrace();            logger.error(String.format("[HttpClientUtils.doRequest] invoke get timout error, url:%s",                    httpRequestBase.getURI()), e);            responseString = "";        } catch (Exception e) {            e.printStackTrace();            logger.error(                    String.format("[HttpClientUtils.doRequest] invoke get error, url:%s", httpRequestBase.getURI()), e);            responseString = "";        } finally {            httpRequestBase.releaseConnection();        }        logger.info("HttpClientUtils response : " + responseString);        return responseString;    }        private static String buildRequestUrl(String url, Map<String, String> params) throws UnsupportedEncodingException {        if (CollectionUtils.isEmpty(params)) {            return url;        }        StringBuilder requestUrl = new StringBuilder();        requestUrl.append(url);        int i = 0;        for (Map.Entry<String, String> entry : params.entrySet()) {            if (i == 0) {                requestUrl.append("?");            }            requestUrl.append(entry.getKey());            requestUrl.append("=");            String value = entry.getValue();            requestUrl.append(URLEncoder.encode(value, "UTF-8"));            requestUrl.append("&");            i++;        }        requestUrl.deleteCharAt(requestUrl.length() - 1);        return requestUrl.toString();    }    public static void setStringParams(HttpPost httpost,                                       Map<String, String> params) {        List<NameValuePair> nvps = new ArrayList<NameValuePair>();        Set<String> keySet = params.keySet();        for (String key : keySet) {            nvps.add(new BasicNameValuePair(key, params.get(key).toString()));        }        try {            httpost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));        } catch (UnsupportedEncodingException e) {        }    }        private static String sendRequest(HttpRequestBase httpRequest, HttpEntity entity) {        httpRequest.setHeader("User-Agent", "okHttp");        if (httpRequest instanceof HttpEntityEnclosingRequestBase) {//            checkArgument(null!=entity,"HttpEntity请求体不能为空");            ((HttpEntityEnclosingRequestBase) httpRequest).setEntity(entity);        }        //忽略证书        SSLContext sslContext = SSLContexts.createDefault();        X509TrustManager tm = new X509TrustManager() {            public void checkClientTrusted(X509Certificate[] xcs,                                           String string) throws CertificateException {            }            public void checkServerTrusted(X509Certificate[] xcs,                                           String string) throws CertificateException {            }            public X509Certificate[] getAcceptedIssuers() {                return null;            }        };        try {            sslContext.init(null, new TrustManager[]{tm}, null);        } catch (Exception ex) {            ex.printStackTrace();        }        X509HostnameVerifier hostnameVerifier = new AllowAllHostnameVerifier();        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);        Registry<ConnectionSocketFactory> r = RegistryBuilder.<ConnectionSocketFactory>create()                .register("https", sslsf)                .build();        HttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(r);        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();        CloseableHttpResponse response = null;        String resString = null;        try {            response = httpClient.execute(httpRequest);            HttpEntity resEntity = response.getEntity();            int statusCode = response.getStatusLine().getStatusCode();            resString = EntityUtils.toString(resEntity, "UTF-8");            System.err.println(statusCode);            if (statusCode != HttpStatus.SC_OK) {                System.out.println("响应码状态不是200");            }            return resString;        } catch (Exception e) {            throw new RuntimeException(resString, e);        } finally {            try {                if (response != null) {                    response.close();                }                if (httpRequest != null) {                    httpRequest.releaseConnection();                }                if (httpClient != null) {                    httpClient.close();                }            } catch (IOException e) {                throw new RuntimeException(e);            }        }    }}

调用示例:

public static void delAll(){        String url = path+"test/test/deleteAll";        Map map = new HashMap<>();        String str = HttpClientUtils.invokePost(url,map);        System.out.println("delAll.str="+str);    }

到此,相信大家对“java的http请求工具类HttpClientUtils怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯