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;
    }
}
相关推荐
全栈工程师修炼指南8 小时前
Nginx | HTTPS 加密传输:Nginx 反向代理与上游服务 SSL 双向认证实践
网络·数据库·nginx·https·ssl
Dovis(誓平步青云)8 小时前
《Linux生态下HTTP协议解析+进阶HTTPS证书:抓包、拆解与问题排查实战》
linux·运维·http
Boop_wu8 小时前
[Java EE] 网络原理(2) http
网络·网络协议·http
大布布将军9 小时前
⚡️编排的艺术:BFF 的核心职能——数据聚合与 HTTP 请求
前端·网络·网络协议·程序人生·http·node.js·改行学it
爬山算法1 天前
Netty(21)Netty的SSL/TLS支持是如何实现的?
网络·网络协议·ssl
Bruce_Liuxiaowei1 天前
网站敏感文件_目录大全(分类记忆+风险标注)
运维·网络·网络协议·http·网络安全·https
charlee441 天前
使用cpp-httplib发布HTTP服务
c++·http·json·cpp-httplib
爬山算法1 天前
Netty(22)如何实现基于Netty的HTTP客户端和服务器?
服务器·网络协议·http
爱吃香蕉的阿豪1 天前
NET Core中ConcurrentDictionary详解:并发场景下的安全利器及服务端实践
安全·http·.netcore·高并发
青木川崎2 天前
Mac使用idea连接svn报错svn: E230001: Server SSL certificate verification failed
svn·intellij-idea·ssl