Java實現https請求

/**
 * @author XuJD
 * @create 2019-01-21 17:21
 **/
public class HttpsUtil {
    private static Logger logger = LoggerFactory.getLogger(HttpsUtil.class);

    public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
        logger.info("send https requestUrl:"+requestUrl);
        logger.info("send https requestMethod:"+requestMethod);
        logger.info("send https param:"+outputStr);
        JSONObject jsonObject = new JSONObject();
        StringBuffer buffer = new StringBuffer();
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader bufferedReader = null;
        try {
            // 創建SSLContext對象,並使用我們指定的信任管理器初始化
            TrustManager[] tm = {new MyX509TrustManager()};
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 從上述SSLContext對象中得到SSLSocketFactory對象
            SSLSocketFactory ssf = sslContext.getSocketFactory();

            URL url = new URL(requestUrl);
            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
            httpUrlConn.setSSLSocketFactory(ssf);
            /*允許輸出*/
            httpUrlConn.setDoOutput(true);
            /*允許輸入*/
            httpUrlConn.setDoInput(true);
            /*不允許緩存*/
            httpUrlConn.setUseCaches(false);
            // 設置請求方式(GET/POST)
            httpUrlConn.setRequestMethod(requestMethod);
            /*如果是get請求,明文連接*/
            if (HttpMethod.GET.toString().equalsIgnoreCase(requestMethod)) {
                httpUrlConn.connect();
            }
            // 當有數據需要提交時
            if (!StringUtils.isEmpty(outputStr)) {
                OutputStream outputStream = httpUrlConn.getOutputStream();
                // 注意編碼格式,防止中文亂碼
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }
            // 將請求返回的輸入流轉換成字json對象
            inputStream = httpUrlConn.getInputStream();
            inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
            bufferedReader = new BufferedReader(inputStreamReader);
            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            httpUrlConn.disconnect();
            jsonObject = (JSONObject) JSONObject.parse(buffer.toString());
            logger.info("response code:"+httpUrlConn.getResponseCode());
            logger.info("response jsonObject:"+jsonObject);
        } catch (ConnectException ce) {
            logger.info("Weixin server connection timed out.");
            throw new BusinessException("Weixin server connection timed out.");
        } catch (Exception e) {
            logger.info("https request error:" + e);
            throw new BusinessException("https request error:" + e);
        } finally {
            try {
                // 釋放資源
                bufferedReader.close();
                inputStreamReader.close();
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return jsonObject;
    }
}

自定義信任管理器

/**
 * @author XuJD
 * @create 2019-01-21 17:24
 **/
public class MyX509TrustManager implements X509TrustManager{
    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章