Java中的原生post请求方式

 更新时间:2023年10月07日 08:38:02   作者:沙皮狗你不懂  
这篇文章主要介绍了Java中的原生post请求方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.post请求方式(有参数)

因为请求地址为https 需要配置不验证证书

/**
     * post请求方式(有参数) 因为请求地址为https 需要配置不验证证书
     */
    public static String post(String strUrl, Map<String, Object> params) {
        try {
            // 添加信任主机
            trustAllHosts();
            // 创建连接
            URL url = new URL(strUrl);
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
            // 不验证配置
            connection.setHostnameVerifier(DO_NOT_VERIFY);
            // 设置请求方式
            connection.setRequestMethod("POST");
            connection.setRequestProperty("accept","*/*");
            connection.setRequestProperty("connection","Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 设置发送数据的格式json
            connection.setRequestProperty("Content-Type","application/json");
            // 设置token appkey
            connection.setRequestProperty("apikey","Z31jdnojkYFg3z3mXourHjP5gmpg9Ms9");
            // 设置接收数据的格式json
            connection.setRequestProperty("Accept", "application/json");
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
            // 阿里巴巴的fastjson
            out.append(JSON.toJSONString(params));
            out.flush();
            out.close();
            // 请求成功
            int responseCode = connection.getResponseCode();
            if (responseCode == 200) {
                // 读取响应
                StringBuffer respResult = new StringBuffer();
                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
                String line;
                while ((line = reader.readLine()) != null) {
                    respResult.append(line);
                }
                reader.close();
                log.info("Req Success{}" + respResult.toString());
                return respResult.toString();
            }
        } catch (Exception e) {
            log.info("Req Error{}" + e.getMessage());
            return e.getMessage();
        }
        // 请求失败
        return null;
    }
/**
     * 不验证配置
     */
    private final static HostnameVerifier DO_NOT_VERIFY = (hostname, session) -> true;
    /**
     * 添加信任主机
     */
    private static void trustAllHosts() {
        // 创建不验证证书链的信任管理器 这里使用的是x509证书 此处的MyX509TrustManager()为实现重写方法
        TrustManager[] trustAllCerts = new TrustManager[]{new MyX509TrustManager() {
            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[]{};
            }
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) {}
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) {}
        }};
        // 安装所有信任的信任管理器
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            //HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2.post请求方式(无参数)

/**
     * post请求方式(无参数)
     */
    public static String post(String strUrl) {
        try {
            // 创建连接
            URL url = new URL(strUrl);
            HttpURLConnection connection = (HttpsURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            // 设置请求方式
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Connection", "keep-alive");
            // 设置接收数据的格式json
            connection.setRequestProperty("Accept", "application/json");
            // connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式json
            connection.connect();
            // 获取响应码
            int code = connection.getResponseCode();
            // 请求成功
            if (code == 200) {
                // 读取响应
                StringBuffer respResult = new StringBuffer();
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
                String line;
                while ((line = reader.readLine()) != null) {
                    respResult.append(line);
                }
                reader.close();
                log.info("Req Success{}" + respResult.toString());
                return respResult.toString();
            }
        } catch (Exception e) {
            log.info("Req Error{}" + e.getMessage());
            return e.getMessage();
        }
        // 请求失败
        return null;
    }
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
 * 重写的X509TrustManager类
 */
public class MyX509TrustManager implements X509TrustManager { 
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) {}
    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) {}
    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return null; 
    } 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring boot2.x中集成H2数据库代码实例

    Spring boot2.x中集成H2数据库代码实例

    这篇文章主要介绍了Spring boot2.x中集成H2数据库代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java基础之选择结构与循环结构

    Java基础之选择结构与循环结构

    这篇文章主要介绍了Java基础之选择结构与循环结构,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • SpringBoot2 实现JPA分页和排序分页的案例

    SpringBoot2 实现JPA分页和排序分页的案例

    这篇文章主要介绍了SpringBoot2 实现JPA分页和排序分页的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java日常练习题,每天进步一点点(17)

    Java日常练习题,每天进步一点点(17)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Spring Cloud详细讲解zuul集成Eureka流程

    Spring Cloud详细讲解zuul集成Eureka流程

    这篇文章主要介绍了Spring Cloud zuul集成Eureka,Eureka Client中内置一个负载均衡器,用来进行基本的负载均衡,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • java解析xml之dom解析xml示例分享

    java解析xml之dom解析xml示例分享

    DOM将整个XML文件加载到内存中,并构建出节点树;应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点、属性等信息; 这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内存,解析速度也不快,下面看使用示例吧
    2014-01-01
  • SpringBoot、mybatis返回树结构的数据实现

    SpringBoot、mybatis返回树结构的数据实现

    本文主要介绍了SpringBoot、mybatis返回树结构的数据实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • JDK1.7的ConcurrentHashMap源码解析

    JDK1.7的ConcurrentHashMap源码解析

    这篇文章主要介绍了JDK1.7的ConcurrentHashMap源码解析,HashMap是非线程安全的,而HashTable是线程安全的,但是HashTable实现同步的方法比较暴力,即在所有的方法体上添加synchronized关键字,需要的朋友可以参考下
    2023-12-12
  • JavaWeb评论功能实现步骤以及代码实例

    JavaWeb评论功能实现步骤以及代码实例

    项目初始版本上线,有时间写点东西记录一下项目中的心得体会,通过这个项目学习了很多,要写下来的有很多,先从评论功能开始吧,下面这篇文章主要给大家介绍了关于JavaWeb评论功能实现步骤以及代码的相关资料,需要的朋友可以参考下
    2023-01-01
  • java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    这篇文章主要介绍了java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解,需要的朋友可以参考下
    2020-02-02

最新评论