我是靠谱客的博主 阳光月饼,最近开发中收集的这篇文章主要介绍java 融合 http 和 https 的post请求方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

package com.test;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
 
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.net.ssl.X509TrustManager;

import com.alibaba.fastjson.JSONObject;
 
 

public class HttpsServer {
    
    /** * 默认请求超时时间20s */
    private static int DEFAUL_TIME_OUT = 20000;
    /** * 默认保持时间60s */
    private static int HTTP_KEEP_TIME = 60000;
    /** 默认编码 */
    private static String charSet = "GBK";
    private static SSLContext sslcontext = null;
    private static SSLSocketFactory socketFactory = null;
    private static TrustManager[] tm = {getServerTrustManager()};
    private static HostnameVerifier hv = new HostnameVerifier() {
        @Override
        public boolean verify(String urlHostName, SSLSession session) {
            return true;
        }

    };
    static{
        try {
            sslcontext = SSLContext.getInstance("SSL");
            sslcontext.init(null, tm, new SecureRandom());
            socketFactory = sslcontext.getSocketFactory();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            System.out.println(e);
        } catch (KeyManagementException e) {
            // TODO Auto-generated catch block
            System.out.println(e);
        }
    }
     
    @SuppressWarnings("rawtypes")
    public static String  doPost(String URL,Map<String,String> parameters) throws UnsupportedEncodingException{
        String res="";
        DataOutputStream out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        JSONObject jsonObject = new JSONObject();
        HttpURLConnection conn = null;
        InputStreamReader is = null;
        InputStream iss = null;
        StringBuffer params = new StringBuffer();
        for (Iterator iter = parameters.entrySet().iterator(); iter
                .hasNext();) {
            Entry element = (Entry) iter.next();
            params.append(element.getKey().toString());
            params.append("=");
            params.append(URLEncoder.encode(element.getValue().toString(),
                    charSet));
            params.append("&");
        }
        if (params.length() > 0) {
            params = params.deleteCharAt(params.length() - 1);
        }
        System.out.println("params:"+params);
        try {
         
            long start_tm = System.currentTimeMillis();
            URL url = new URL(URL);
            long end_tm = System.currentTimeMillis();
            conn = (HttpURLConnection) url.openConnection();
            if ("https".equalsIgnoreCase(url.getProtocol())){
                ((HttpsURLConnection)conn).setHostnameVerifier(hv);
                ((HttpsURLConnection)conn).setSSLSocketFactory(socketFactory);
                end_tm = System.currentTimeMillis();
            }
            conn.setRequestMethod("POST");
            // 发送POST请求必须设置为true
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 设置连接超时时间和读取超时时间
            conn.setConnectTimeout(DEFAUL_TIME_OUT);
            conn.setReadTimeout(HTTP_KEEP_TIME);
            end_tm = System.currentTimeMillis();
            // 获取输出流
            //out = new OutputStreamWriter(conn.getOutputStream());
            out = new DataOutputStream(conn.getOutputStream());

            long start_tm2 = System.currentTimeMillis();
            byte[] b = params.toString().getBytes();
            out.write(b);
            out.flush();
            out.close();
            end_tm = System.currentTimeMillis();
            System.out.println("传输数据时间:"+ (end_tm - start_tm2));
            // 取得输入流,并使用Reader读取
            start_tm2 = System.currentTimeMillis();
            jsonObject.put("status", conn.getResponseCode());
            end_tm = System.currentTimeMillis();
            System.out.println("总耗时:"+ (end_tm - start_tm));
            if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
                iss = conn.getInputStream();
                is = new InputStreamReader(iss,charSet);
                in = new BufferedReader(is);
                String line;
                while ((line = in.readLine()) != null) {
                    result.append(line);
                }
            } else {
                System.out.println("ResponseCode is an error code:" + conn.getResponseCode());
                throw new RuntimeException("ResponseCode is an error code:" + conn.getResponseCode());
            }
            System.out.println("result:"+ result.toString());
            res=result.toString();

        } catch (Exception e) {
            System.out.println(e);
            throw new RuntimeException(e);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    System.out.println(e);
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    System.out.println( e);
                }
            }
            if (iss != null) {
                try {
                    iss.close();
                } catch (IOException e) {
                    System.out.println( e);
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    System.out.println(e);
                }
            }

            if (conn != null){
                conn.disconnect();
            }
        }
        return res;
    }

    /**
     * 信任所有证书
     *
     * @param
     * @return
     */
    private static X509TrustManager getServerTrustManager() {
        X509TrustManager manager = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] arg0, String arg1)
                    throws CertificateException {
                // TODO Auto-generated method stub

            }

            @Override
            public void checkServerTrusted(X509Certificate[] arg0, String arg1)
                    throws CertificateException {
                // TODO Auto-generated method stub

            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                // TODO Auto-generated method stub
                return null;
            }
        };
        return manager;
    }

}

最后

以上就是阳光月饼为你收集整理的java 融合 http 和 https 的post请求方法的全部内容,希望文章能够帮你解决java 融合 http 和 https 的post请求方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部