首页 > 其他分享 >post 请求工具类

post 请求工具类

时间:2024-11-07 15:57:35浏览次数:4  
标签:return String param connection new post null 工具 请求

 

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

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;

@Slf4j
public class PostRequestUtils {

    public PostRequestUtils() {
    }

    /**
     * 发送POST请求并返回结果
     *
     * @param proxyAddress 代理服务器地址
     * @param proxyPort    代理服务器端口
     * @param postUrl      请求URL
     * @param data         请求数据
     * @return 返回结果
     * @throws Exception 抛出异常
     */
    public String sendMsg(String proxyAddress, String proxyPort, String postUrl, String data) throws Exception {
        PrintWriter out = null;
        BufferedReader reader = null;
        String result = null;
        String returnCode = null;

        try {
            if (data != null && !data.isEmpty()) {
                // 创建连接
                URL url = new URL(postUrl);
                // 忽略证书校验
                ignoreSsl(postUrl);
                // 设置代理
                HttpURLConnection connection = createConnection(url, proxyAddress, proxyPort);

                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setRequestMethod("POST");
                connection.setUseCaches(false);
                connection.setInstanceFollowRedirects(false);
                connection.setRequestProperty("Charset", "UTF-8");
                connection.setRequestProperty("Content-Type", "text/html;charset=UTF-8");
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                connection.setRequestProperty("Connection", "Keep-Alive");

                connection.connect();

                // POST请求
                out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8), true);
                out.write(data);
                out.flush();
                out.close();

                // 从HTTP取得返回结果
                reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                returnCode = parseReturnMsg(sb.toString());
                log.info("接口返回:" + returnCode);
                reader.close();
                // 断开连接
                connection.disconnect();
            }
        } catch (IOException e) {
            log.error("发生异常: {}", e.getMessage(), e);
        } finally {
            closeQuietly(out);
            closeQuietly(reader);
        }
        return returnCode;
    }

    /**
     * 解析返回的消息
     *
     * @param jsonData JSON格式的返回数据
     * @return 解析后的结果
     */
    public String parseReturnMsg(String jsonData) {
        try {
            log.info("接收到的JSON数据: {}", jsonData);
            JSONObject jsonObject = JSONObject.parseObject(jsonData);
            JSONObject result = jsonObject.getJSONObject("result");
            return result.getString("code");
        } catch (Exception e) {
            log.error("解析JSON数据时发生异常: {}", e.getMessage(), e);
        }
        return null;
    }

    /**
     * 读取输入流并返回字节数组
     *
     * @param inStream 输入流
     * @return 字节数组
     * @throws Exception 抛出异常
     */
    public static byte[] readInputStream(InputStream inStream) throws Exception {
        try (ByteArrayOutputStream outStream = new ByteArrayOutputStream()) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = inStream.read(buffer)) != -1) {
                outStream.write(buffer, 0, len);
            }
            return outStream.toByteArray();
        } finally {
            inStream.close();
        }
    }

    /**
     * 忽略SSL证书校验
     *
     * @param postUrl 请求URL
     * @throws Exception 抛出异常
     */
    public static void ignoreSsl(String postUrl) throws Exception {
        HostnameVerifier hv = (url, session) -> {
            log.warn("警告: URL Host: {} vs. {}", url, session.getPeerHost());
            return true;
        };
        trustAllHttpsCertificates();
        HttpsURLConnection.setDefaultHostnameVerifier(hv);
    }

    /**
     * 信任所有HTTPS证书
     *
     * @throws Exception 抛出异常
     */
    private static void trustAllHttpsCertificates() throws Exception {
        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[]{new miTM()};
        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    }

    /**
     * 自定义信任管理器
     */
    static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
            return true;
        }

        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
        }

        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
        }
    }

    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url 请求URL
     * @return 返回结果
     */
    public static String get(String url) {
        BufferedReader in = null;
        try {
            URL realUrl = new URL(url);
            // 创建代理服务器
            InetSocketAddress addr = new InetSocketAddress("10.12.129.9", 8080);
            Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // HTTP代理

            // 不使用代理
            URLConnection connection = realUrl.openConnection();
            // 使用代理
            // URLConnection connection = realUrl.openConnection(proxy);

            // 设置通用的请求属性
            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.setRequestProperty("Content-type", "application/x-www-form-urlencoded;");

            // 建立实际的连接
            connection.connect();

            // 读取URL的响应
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
            StringBuilder result = new StringBuilder();
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            return result.toString();
        } catch (Exception e) {
            log.error("发生异常: {}", e.getMessage(), e);
        } finally {
            closeQuietly(in);
        }
        return "";
    }

    /**
     * 关闭PrintWriter,忽略关闭时的异常
     *
     * @param out PrintWriter对象
     */
    private static void closeQuietly(PrintWriter out) {
        if (out != null) {
            try {
                out.close();
            } catch (Exception ignored) {
            }
        }
    }

    /**
     * 关闭BufferedReader,忽略关闭时的异常
     *
     * @param reader BufferedReader对象
     */
    private static void closeQuietly(BufferedReader reader) {
        if (reader != null) {
            try {
                reader.close();
            } catch (Exception ignored) {
            }
        }
    }

    /**
     * 创建HTTP连接
     *
     * @param url          请求URL
     * @param proxyAddress 代理服务器地址
     * @param proxyPort    代理服务器端口
     * @return HttpURLConnection对象
     * @throws IOException 抛出IO异常
     */
    private static HttpURLConnection createConnection(URL url, String proxyAddress, String proxyPort) throws IOException {
        if (proxyPort == null || Integer.parseInt(proxyPort) == 0) {
            return (HttpURLConnection) url.openConnection();
        } else {
            Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyAddress, Integer.parseInt(proxyPort)));
            return (HttpURLConnection) url.openConnection(proxy);
        }
    }
}

  

标签:return,String,param,connection,new,post,null,工具,请求
From: https://www.cnblogs.com/uoky/p/18532486

相关文章

  • 赶快收藏!鼠标单击变双击?这些工具轻松帮你解决!(如何通过软件解决鼠标单击变双击的问题)
    文章目录......
  • 微信多开助手工具,微信多开源码
    文章目录......
  • 使用 vscode 简单配置 ESP32 连接 Wi-Fi 每日定时发送 HTTP 和 HTTPS 请求
    最新博客文章链接文字更新时间:2024/11/07由于学校校园网,如果长时间不重新登陆的话,网速会下降,所以想弄个能定时发送HTTP请求的东西。由于不想给路由器刷系统,也麻烦。就开始考虑使用局域网内的服务器,不过由于服务器没有Wi-Fi模块,也不想搞USB无线wifi网卡,就想着干脆用单......
  • 真没想到!盘点5款可以写作的AI工具网站
    在当今快速发展的科技时代,人工智能(AI)技术在各个领域都展现出了巨大的潜力。尤其是在写作领域,AI工具的应用已经变得越来越普遍。本文将盘点五款可以写作的AI工具网站,并特别推荐万象写作-Mixpaper,帮助读者更好地了解这些工具的功能和优势。1.万象写作-Mixpaper万象写作-Mixpap......
  • 文件夹加密小工具:保护你的隐私安全
    在数字化时代,个人数据的隐私和安全性变得尤为重要。无论是存储重要文件、敏感信息还是私人照片,我们都希望这些数据能够得到妥善保护。文件夹加密小工具正是为了满足这一需求而设计的,它采用C#语言编写,基于.NET4.7框架,并引用了miniExcel库来加载和保存用户设置的文件夹列表,确保下次......
  • winring0.sys 是一个系统驱动程序文件,它通常与第三方工具或软件一起使用,主要用于访问
    winring0.sys是一个系统驱动程序文件,它通常与第三方工具或软件一起使用,主要用于访问系统硬件信息和提供低级别硬件控制。这些工具或软件可能需要与操作系统的内核进行交互,或者获取系统的底层信息,而winring0.sys驱动程序就起到了桥梁的作用,允许这些程序进行底层硬件操作。下面是......
  • “2024年:普通人如何通过AI工具实现盈利?“
    前言:随着AI技术的飞速发展,人工智能已成为创造财富的新引擎。本文将带你探索如何利用AI技术,在现代社会中开辟新的盈利渠道。从个人创业到企业转型,我们将一览AI带来的赚钱机遇,为你在智能时代的财富增长提供思路和策略。1、信息差模式现在市场上AI应用工具很多,不是所有人都......
  • ubuntu 系统安装 node 及 nvm node 版本管理工具
    ubuntu系统安装node及nvmnode版本管理工具 转载至https://www.cnblogs.com/flying--pig/p/17492342.html1.gitclone远程镜像1gitclonehttps://gitee.com/mirrors/nvm2.安装nvm 1bashinstall.sh3.刷......
  • macOS 中的内置命令行工具
    macOS中的内置命令行工具可以帮助用户提高工作效率和解决问题。Usefulbuilt-inmacOScommand-lineutilitieshttps://weiyen.net/articles/useful-macos-cmd-line-utilities本文介绍了macOS系统中一些有用的内置命令行工具。这些工具可以帮助用户提高工作效率和解决问题......
  • Avalonia封装实现指定组件允许拖动的工具类
    创建Avalonia的MVVM项目,命名DragDemo,然后将项目的Nuget包更新到预览版 12345678<ItemGroup>        <PackageReferenceInclude="Avalonia"Version="11.0.0-preview5"/>        <PackageReferenceInclude="Avalonia.Desktop&qu......