当前位置 博文首页 > 谢哥哥的博客:【Java工具类合集】HttpUtils-常用HTTP请求工具类

    谢哥哥的博客:【Java工具类合集】HttpUtils-常用HTTP请求工具类

    作者:[db:作者] 时间:2021-07-13 13:12

    话不多说,直接上代码,记得一键三连哦~

    HttpUtils.java

    import lombok.extern.slf4j.Slf4j;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    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.HttpGet;
    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.DefaultHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    import javax.net.ssl.*;
    import java.io.*;
    import java.net.*;
    import java.nio.charset.StandardCharsets;
    import java.security.cert.X509Certificate;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * HTTP请求工具类
     *
     * @author xiegege
     */
    @Slf4j
    public class HttpUtils {
    
        private static HttpClient httpClient;
    
        static {
            httpClient = getHttpClient();
        }
    
        /**
         * 微信统一下单接口发送post请求
         *
         * @param url        发送请求的URL
         * @param requestXml map转换xml的报文
         * @return 所代表远程资源的响应结果
         */
        public static String doPost(String url, String requestXml) {
            CloseableHttpClient httpClient;
            CloseableHttpResponse httpResponse;
            // 创建httpClient连接对象
            httpClient = HttpClients.createDefault();
            // 创建post请求连接对象
            HttpPost httpPost = new HttpPost(url);
            // 创建连接请求对象,并设置连接参数
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectTimeout(15000)   // 连接服务区主机超时时间
                    .setConnectionRequestTimeout(60000) // 连接请求超时时间
                    .setSocketTimeout(60000).build(); // 设置读取响应数据超时时间
            // 为httppost请求设置参数
            httpPost.setConfig(requestConfig);
            // 将上传参数放到entity属性中
            httpPost.setEntity(new StringEntity(requestXml, "UTF-8"));
            // 添加头信息
            httpPost.addHeader("Content-type", "text/xml");
            String result = "";
            try {
                // 发送请求
                httpResponse = httpClient.execute(httpPost);
                // 从相应对象中获取返回内容
                HttpEntity entity = httpResponse.getEntity();
                result = EntityUtils.toString(entity, "UTF-8");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return result;
        }
    
        /**
         * 向指定 URL 发送GET方法的请求
         *
         * @param url   发送请求的 URL
         * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
         * @return 所代表远程资源的响应结果
         */
        public static String sendGet(String url, String param) {
            return sendGet(url, param, "UTF-8");
        }
    
        /**
         * 向指定 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 {
                log.info("sendPost - {}", url);
                URL realUrl = new URL(url);
                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