https/http访问接口工具类,附带ssl忽略证书验证,以及head头部的添加-java版

复制即用

java 复制代码
package utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.security.cert.X509Certificate;
import java.util.List;

/**
 * @author lpx
 * @create 2021-06-28 11:17
 * @Description http请求工具类
 * @Version 1.0
 */

@Slf4j
@Component
public class HttpSendUtils {


    public static String sendHeaderPostWb(String url, String contentType, String param, List<String> headers) {
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        HttpURLConnection conn = null;
        try {
            URL realUrl = new URL(url);
            boolean isHttps = "https".equalsIgnoreCase(realUrl.getProtocol());
            if (isHttps) {
                // 创建一个忽略证书验证的SSLContext
                SSLContext sslContext = SSLContext.getInstance("TLS");
                sslContext.init(null, new X509TrustManager[]{new X509TrustManager() {
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    @Override
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {
                    }

                    @Override
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {
                    }
                }}, new java.security.SecureRandom());

                // 安装所有的信任管理器(仅用于HTTPS)
                // 注意:在实际应用中,不建议这样做,因为它会绕过SSL/TLS的安全验证。
                // 这里只是为了演示如何忽略证书验证。
                SSLContext.setDefault(sslContext);
                // 创建一个HttpsURLConnection对象
                HostnameVerifier hv = new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession session) {
                        return true; // 接受任何主机名
                    }
                };
                conn = (HttpsURLConnection) realUrl.openConnection();
                ((HttpsURLConnection) conn).setHostnameVerifier(hv);
            }else{
                conn = (HttpURLConnection) realUrl.openConnection();
            }
            // 设置通用的请求属性
            conn.setRequestProperty("Content-Type", contentType);
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("Accept-Charset", "UTF-8");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

            if (!headers.isEmpty()) {
                for (String header : headers) {
                    String[] parts = header.split(":");
                    conn.setRequestProperty(parts[0].trim(), parts[1].trim());
                }
            }
            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(conn.getOutputStream());
            // 发送请求参数
            out.print(param);
            // flush输出流的缓冲
            out.flush();

            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        return result;
    }
}
相关推荐
sumatch2 小时前
RPC是什么?和HTTP区别?
网络协议·http·rpc
雨中rain1 天前
Linux -- HTTP 请求 与 响应 报文
网络·网络协议·http
浅念同学1 天前
网络编程-网络原理HTTP上
网络·网络协议·http
zhu09021501022 天前
minio https配置
网络协议·http·https
鹅肝手握高V五色2 天前
免费代理抓包工具SniffMaster(嗅探大师)抓取https
网络协议·http·https
Zfox_2 天前
应用层协议 HTTP 讲解&实战:从0实现HTTP 服务器
linux·服务器·网络·c++·网络协议·http
前端没钱2 天前
flutter入门系列教程<2>:Http请求库-dio的使用
网络协议·flutter·http
幽兰的天空3 天前
介绍 HTTP 请求如何实现跨域
网络·网络协议·http
lisenustc3 天前
HTTP post请求工具类
网络·网络协议·http
心平气和️3 天前
HTTP 配置与应用(不同网段)
网络·网络协议·计算机网络·http