Http请求工具类:Get/Post

自己写或者用Hutool工具类里HttpUtil的都可以 

第一种 (目前没发现问题)

package com.cn.utils;


import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

public class HttpUtil {
    /**
     * get请求
     *
     * @param url     url
     * @param params  参数
     * @param headers 请求头
     * @return 结果
     * headers.put("Content-Type", "application/x-www-form-urlencoded");
     * headers.put("User-Agent", "Mozilla/5.0");
     */
    public static String sendGet(String url, Map<String, String> params, Map<String, String> headers) throws Exception {
        StringBuilder result = new StringBuilder();
        String paramString = "";

        // 将参数拼接在URL上
        if (params != null && !params.isEmpty()) {
            for (String key : params.keySet()) {
                paramString += key + "=" + params.get(key) + "&";
            }
            paramString = paramString.substring(0, paramString.length() - 1);
            url += "?" + paramString;
        }

        // 创建连接
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        // 设置请求头
        if (headers != null && !headers.isEmpty()) {
            for (String key : headers.keySet()) {
                con.setRequestProperty(key, headers.get(key));
            }
        }

        // 发送GET请求
        con.setRequestMethod("GET");
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            result.append(inputLine);
        }
        in.close();

        return result.toString();
    }

    /**
     * post请求 参数形式
     *
     * @param url        url
     * @param parameters 参数
     * @param headers    请求头
     * @return 结果
     * headers.put("Content-Type", "application/x-www-form-urlencoded");
     * headers.put("User-Agent", "Mozilla/5.0");
     */
    public static String sendPost(String url, Map<String, String> parameters, Map<String, String> headers) throws Exception {
        // 创建链接对象
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        // 设置请求方法为POST
        con.setRequestMethod("POST");

        // 设置请求头信息
        for (Map.Entry<String, String> entry : headers.entrySet()) {
            con.setRequestProperty(entry.getKey(), entry.getValue());
        }

        // 发送POST请求
        con.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        StringBuilder params = new StringBuilder();
        for (Map.Entry<String, String> entry : parameters.entrySet()) {
            if (params.length() != 0) {
                params.append('&');
            }
            params.append(entry.getKey()).append('=').append(entry.getValue());
        }
        wr.writeBytes(params.toString());
        wr.flush();
        wr.close();

        // 获取响应信息
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        return response.toString();
    }

    /**
     * post请求 json形式
     *
     * @param url      url
     * @param jsonBody 参数
     * @param headers  请求头
     * @return 结果
     * headers.put("Content-Type", "application/json");
     * headers.put("User-Agent", "Mozilla/5.0");
     */
    public static String sendPost2(String url, String jsonBody, Map<String, String> headers) throws Exception {

        // 创建链接对象
        URL obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        // 设置请求方法为POST
        con.setRequestMethod("POST");

        // 设置请求头信息
        for (Map.Entry<String, String> entry : headers.entrySet()) {
            con.setRequestProperty(entry.getKey(), entry.getValue());
        }

        // 发送POST请求
        con.setDoOutput(true);
        try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {
            wr.writeBytes(jsonBody);
            wr.flush();
        }

        // 获取响应信息
        int responseCode = con.getResponseCode();
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        return response.toString();
    }

    /**
     * 调用豆瓣接口
     */
    public static void main(String[] args) throws Exception {
        Map<String, String> params = new HashMap<>();
        params.put("type", "11");
        params.put("interval_id", "100:90");

        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", "application/x-www-form-urlencoded");
        headers.put("User-Agent", "Mozilla/5.0");

        String response = HttpUtil.sendGet("https://movie.douban.com/j/chart/top_list_count", params, headers);
        System.out.println(response);
    }
}

第二种 (打印了日志)

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
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.config.ConnectionConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustStrategy;
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.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;


/**
 * @program: http请求工具类
 * @Description
 * @Author Yph
 */
public class HttpUtil {

    public static String defaultEncoding = "utf-8";

    /**
     * @Description: 发送http post请求,并返回响应实体
     * @Author: Yph
     * @Param [url:url]
     * @Return: java.lang.String
     **/
    public static String postRequest(String url) {
        return postRequest(url, null, null);
    }

    /**
     * @Description: 发送http post请求,并返回响应实体
     * @Author: Yph
     * @Param [url:url, params:json对象格式参数]
     * @Return: java.lang.String
     **/
    public static String postRequest(String url, JSONObject params) {
        return postRequest(url, null, params);
    }

    /**
     * @Description: 发送http post请求,并返回响应实体
     * @Author: Yph
     * @Param [url:url, headersMap:请求头,params:json对象格式参数]
     * @Return: java.lang.String
     **/
    public static String postRequest(String url, Map<String, String> headersMap,
                                     JSONObject params) {
        String result = null;
        CloseableHttpClient httpClient = buildHttpClient();
        HttpPost httpPost = new HttpPost(url);
        //请求头
        if (null != headersMap && headersMap.size() > 0) {
            for (Entry<String, String> entry : headersMap.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                httpPost.addHeader(new BasicHeader(key, value));
            }
        }
        //参数JSON格式
        if (null != params && params.size() > 0) {
            StringEntity stringEntity = new StringEntity(params.toString(), "utf-8");
            stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
            httpPost.setEntity(stringEntity);
        }

        try {
            CloseableHttpResponse response = null;
            if (httpClient != null) {
                response = httpClient.execute(httpPost);
            }
            try {
                HttpEntity entity = null;
                if (response != null) {
                    entity = response.getEntity();
                }
                if (entity != null) {
                    result = EntityUtils.toString(entity,
                            Charset.forName(defaultEncoding));
                }
            } finally {
                if (response != null) {
                    response.close();
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (httpClient != null) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return result;
    }

    /**
     * @Description: 发送http get请求,并返回响应实体
     * @Author: Yph
     * @Param [url]
     * @Return: java.lang.String
     **/
    public static String getRequest(String url) {
        return getRequest(url, null);
    }


    /**
     * @Description: 发送http get请求,并返回响应实体
     * @Author: Yph
     * @Param [url:url, params:参数]
     * @Return: java.lang.String
     **/
    public static String getRequest(String url, Map<String, Object> params) {
        return getRequest(url, null, params);
    }

    /**
     * @Description:
     * @Author: Yph
     * @Param [url:url, headersMap:请求头, params:参数]
     * @Return: java.lang.String
     **/
    public static String getRequest(String url, Map<String, String> headersMap, Map<String, Object> params) {
        String result = null;
        CloseableHttpClient httpClient = buildHttpClient();
        try {
            String apiUrl = url;
            if (null != params && params.size() > 0) {
                StringBuffer param = new StringBuffer();
                int i = 0;
                for (String key : params.keySet()) {
                    if (i == 0)
                        param.append("?");
                    else
                        param.append("&");
                    param.append(key).append("=").append(params.get(key));
                    i++;
                }
                apiUrl += param;
            }

            HttpGet httpGet = new HttpGet(apiUrl);
            if (null != headersMap && headersMap.size() > 0) {
                for (Entry<String, String> entry : headersMap.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue();
                    httpGet.addHeader(new BasicHeader(key, value));
                }
            }
            CloseableHttpResponse response = httpClient.execute(httpGet);
            try {
                HttpEntity entity = response.getEntity();
                if (null != entity) {
                    result = EntityUtils.toString(entity, defaultEncoding);
                }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 创建httpclient
     */
    public static CloseableHttpClient buildHttpClient() {
        try {
            RegistryBuilder<ConnectionSocketFactory> builder = RegistryBuilder
                    .create();
            ConnectionSocketFactory factory = new PlainConnectionSocketFactory();
            builder.register("http", factory);
            KeyStore trustStore = KeyStore.getInstance(KeyStore
                    .getDefaultType());
            SSLContext context = SSLContexts.custom().useTLS()
                    .loadTrustMaterial(trustStore, new TrustStrategy() {
                        public boolean isTrusted(X509Certificate[] chain,
                                                 String authType) throws CertificateException {
                            return true;
                        }
                    }).build();
            LayeredConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(
                    context,
                    SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            builder.register("https", sslFactory);
            Registry<ConnectionSocketFactory> registry = builder.build();
            PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(
                    registry);
            ConnectionConfig connConfig = ConnectionConfig.custom()
                    .setCharset(Charset.forName(defaultEncoding)).build();
            SocketConfig socketConfig = SocketConfig.custom()
                    .setSoTimeout(100000).build();
            manager.setDefaultConnectionConfig(connConfig);
            manager.setDefaultSocketConfig(socketConfig);
            return HttpClientBuilder.create().setConnectionManager(manager)
                    .build();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String url = "http://127.0.0.1:8080/ListAll";

        JSONObject params = new JSONObject();
        params.put("userId", "1");
        params.put("pageNo", 1);
        params.put("pageSize", 10);
        System.out.println(params);

        Map<String, String> heardMap = new HashMap<String, String>();
        heardMap.put("X-Access-Token", "1");

        String result = HttpUtil.postRequest(url, heardMap, params);
        System.out.println("响应--->>> " + result);
    }

    /**
     * @Description: 发送post请求
     * @Author: Yph
     * @Param [url:url, jsonObject:参数(json类型), encoding:编码格式]
     * @Return: java.lang.String
     **/
    public static String send(String url, JSONObject jsonObject, String encoding) throws ParseException, 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);
        
        //设置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);
        //获取结果实体
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            //按指定编码转换结果实体为String类型
            body = EntityUtils.toString(entity, encoding);
        }
        EntityUtils.consume(entity);
        //释放链接
        response.close();
        return body;
    }

}

第三种 (处理部分请求有问题需要改)

package com.shinkeer.core.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;


/**
 * @description: http请求工具类
 * @author: Yph
 * @date: 2022/12/7
 **/
@Slf4j
public class HttpUtils {
    /**
     * @description: post请求
     * @author: Yph
     * @date: 2022/12/7
     * @param: [url:url, headersMap:请求头, param:入参(json格式字符串)]
     * @return: java.lang.String(json格式字符串)
     **/
    public static String sendJsonPost(String url, Map<String, String> headersMap, String params) {
        System.out.println("\n==============================POST请求开始==============================");
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            URL realUrl = new URL(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)");
            //设置Content-type 为 application/json
            conn.addRequestProperty("Content-type", "application/json");

            //自定义请求头如Token之类
            if (null != headersMap && headersMap.size() > 0) {
                for (Map.Entry<String, String> entry : headersMap.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue();
                    conn.setRequestProperty(key, value);
                }
            }

            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(params);
            // flush输出流的缓冲
            out.flush();
            // 定义BufferedReader输入流来读取URL的响应

            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!" + e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        System.out.println("url:" + url);
        System.out.println("POST请求结果:" + result);
        System.out.println("==============================POST请求结束==============================\n");
        return result;
    }

    /**
     * @description: get请求
     * @author: Yph
     * @date: 2022/12/7
     * @param: [url:url, headersMap:请求头, param:入参(json格式字符串)]
     * @return: java.lang.String(json格式字符串)
     **/
    public static String sendJsonGet(String url, Map<String, String> headersMap, String params) {
        System.out.println("\n==============================GET请求开始==============================");
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            Map<String, Object> mapJson = JSON.parseObject(params);
            String param = setParams(mapJson);
            String urlNameString = url + "?" + param;
            log.info("sendGet - {}", urlNameString);
            URL realUrl = new URL(urlNameString);

            // 打开和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)");
            //设置Content-type 为 application/json
            conn.addRequestProperty("Content-type", "application/json");

            //自定义请求头如Token之类
            if (null != headersMap && headersMap.size() > 0) {
                for (Map.Entry<String, String> entry : headersMap.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue();
                    conn.setRequestProperty(key, value);
                }
            }

            conn.getInputStream();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 GET 请求出现异常!" + e);
            e.printStackTrace();
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        System.out.println("url:" + url);
        System.out.println("GET请求结果:" + result);
        System.out.println("==============================GET请求结束==============================\n");
        return result;
    }

    /**
     * 拼装参数到url
     *
     * @param params 参数
     * @return 参数字符串
     */
    public static String setParams(Map<String, Object> params) {
        StringBuilder param = new StringBuilder();
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            param.append("&").append(entry.getKey()).append("=").append(entry.getValue());
        }
        return param.substring(1);
    }

    public static void main(String[] args) {
        String url = "https:";//post
        String url2 = "https:";//get

        JSONObject params = new JSONObject();
        params.put("platformOrderCode", "7J961670376400639ls844848");
        params.put("pageNo", 1);
        params.put("pageSize", 10);
        System.out.println(params.toString());

        JSONObject params2 = new JSONObject();
        params2.put("categoryId", "5a490093e57a457cbad34f5fc494f49d");
        System.out.println(params2.toString());

        Map<String, String> heardMap = new HashMap<String, String>();
        heardMap.put("Access-Token", "eHCMNrBS4382qCTuJXz4FKrUYYFu7GTR+ZVTkxLyq1OnacedVl9qr17Q6P6l/+1H");

        String result = sendJsonPost(url, heardMap, params.toString());
        Map map = JSON.parseObject(result);

        String result2 = sendJsonGet(url2, heardMap, params2.toString());
        Map map2 = JSON.parseObject(result2);

        System.out.println("请求结果POST>>> " + map);
        System.out.println("请求结果GET>>> " + map2);
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值