java post方式传递数据的两种方式(http https)

采用哪种方式传递数据,主要取决于目标地址是否有ssl协议。即前缀是http还是https

1.http方式

字段解析:
1.url:表示要传递到的目标地址 String类型
2.byte[] parameter :表示要传递的数据。String.getBytes()可以得到该类型

//重载 http方法。
      public static String httpPost (String url, byte[] parameter) {
            return httpPost(url, parameter, null);
        }

    public static String httpPost (String url, byte[] parameter, String base64) {

        //定义stringbuffer  方便后面读取网页返回字节流信息时的字符串拼接
        StringBuffer buffer = new StringBuffer();

        //创建url_connection
        java.net.URLConnection http_url_connection = null;
        try {
            http_url_connection = (new java.net.URL(url)).openConnection();
            http_url_connection.setDoInput(true);
            http_url_connection.setDoOutput(true);
            //http_url_connection.setRequestMethod("POST");
            http_url_connection.setRequestProperty("Content-Length", String.valueOf(parameter.length));
            http_url_connection.setRequestProperty("Content-Type", "application/json");
            http_url_connection.setUseCaches(false);

            if (null!=base64) {
                //如果传入的参数不为空,则通过base64将传入参数解码
                http_url_connection.setRequestProperty("Authorization", "Basic "+new String(java.util.Base64.getEncoder().encode(base64.getBytes("utf-8")), "utf-8"));
            }

            // write request.
            java.io.BufferedOutputStream output_stream = new java.io.BufferedOutputStream(http_url_connection.getOutputStream());
            output_stream.write(parameter);
            output_stream.flush();
            output_stream.close();
            output_stream = null;

            java.io.InputStreamReader input_stream_reader = new java.io.InputStreamReader(http_url_connection.getInputStream(), "utf-8");
            java.io.BufferedReader buffered_reader = new java.io.BufferedReader(input_stream_reader);
            buffer = new StringBuffer();
            String line;
            while ((line = buffered_reader.readLine()) != null) {
                buffer.append(line);
            }

            line=null;
            input_stream_reader.close();
            input_stream_reader = null;
            buffered_reader.close();
            buffered_reader = null;
        //  http_url_connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return buffer.toString(); 
    }

2.https的方式

字段意思和上面的一样。
其中第三个是”application/json” 即 传递数据的格式。
第四个则表示的是,传递数据的认证方式。一般都是null或者""

 public static String httpsPost (String url, byte[] parameter, String content_type, String base64) {
            StringBuffer buffer = new StringBuffer();

            // 声明SSL上下文
            javax.net.ssl.SSLContext ssl_context = null;
            try {
                ssl_context = javax.net.ssl.SSLContext.getInstance("SSL");
                ssl_context.init(null, new javax.net.ssl.TrustManager[]{
                    new javax.net.ssl.X509TrustManager() {
                        @Override
                        public void checkClientTrusted (java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
                        }
                        @Override
                        public void checkServerTrusted (java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException {
                        }
                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }
                    }   
                }, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
            javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(ssl_context.getSocketFactory());

            // 实例化主机名验证接口
            javax.net.ssl.HostnameVerifier hostname_verifier = new javax.net.ssl.HostnameVerifier(){
                @Override
                public boolean verify(String hostname, javax.net.ssl.SSLSession session) {
                    return true;
                }
            };
            javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(hostname_verifier);

            javax.net.ssl.HttpsURLConnection http_url_connection = null;
            try {
//              System.out.println("url"+url);
                http_url_connection = (javax.net.ssl.HttpsURLConnection)(new java.net.URL(url)).openConnection();
                http_url_connection.setDoInput(true);
                http_url_connection.setDoOutput(true);
                http_url_connection.setRequestMethod("POST");
                http_url_connection.setRequestProperty("Content-Length", String.valueOf(parameter.length));
                http_url_connection.setRequestProperty("Content-Type", content_type);
                http_url_connection.setUseCaches(false);
                if (null!=base64) {
                    http_url_connection.setRequestProperty("Authorization", "Basic "+new String(java.util.Base64.getEncoder().encode(base64.getBytes("utf-8")), "utf-8"));
                }

                // write request.
                java.io.BufferedOutputStream output_stream = new java.io.BufferedOutputStream(http_url_connection.getOutputStream());
                output_stream.write(parameter);
                output_stream.flush();
                output_stream.close();
                output_stream = null;

                java.io.InputStreamReader input_stream_reader = new java.io.InputStreamReader(http_url_connection.getInputStream(), "utf-8");
                java.io.BufferedReader buffered_reader = new java.io.BufferedReader(input_stream_reader);
                buffer = new StringBuffer();
                String line;
                while ((line = buffered_reader.readLine()) != null) {
                    buffer.append(line);
                }
                line=null;
                input_stream_reader.close();
                input_stream_reader = null;
                buffered_reader.close();
                buffered_reader = null;
                http_url_connection.disconnect();
            } catch (Exception e) {  
                e.printStackTrace();  
            }

            return buffer.toString();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自在如风。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值