使用java發送https的請求

cnp5 9年前發布 | 20K 次閱讀 Java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.cert.CertificateException;
import java.util.Map;

import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate;

public class HttpsGetData { private static class TrustAnyTrustManager implements X509TrustManager {

    public void checkClientTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
    }

    public void checkServerTrusted(X509Certificate[] chain, String authType)
            throws CertificateException {
    }

    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[] {};
    }
}

private static class TrustAnyHostnameVerifier implements HostnameVerifier {
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
}
String _url="";

Map<String,String> _params;

public HttpsGetData(String url,Map<String,String> keyValueParams)
{
    this._url=url;
    this._params=keyValueParams;
}
public String Do() throws Exception
{
     String result = "";
     BufferedReader in = null;
        try {

            String urlStr = this._url + "&" + getParamStr();
            System.out.println("GET請求的URL為:"+urlStr);
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },
                     new java.security.SecureRandom());
            URL realUrl = new URL(urlStr);
            // 打開和URL之間的連接
            HttpsURLConnection connection = (HttpsURLConnection) realUrl.openConnection();
            //設置https相關屬性
            connection.setSSLSocketFactory(sc.getSocketFactory());
            connection.setHostnameVerifier(new TrustAnyHostnameVerifier());
            connection.setDoOutput(true);

            // 設置通用的請求屬性
            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.connect();

            // 定義 BufferedReader輸入流來讀取URL的響應
            in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            System.out.println("獲取的結果為:"+result);
        } catch (Exception e) {
            System.out.println("發送GET請求出現異常!" + e);
            //e.printStackTrace();
            throw e;
        }
        // 使用finally塊來關閉輸入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                //e2.printStackTrace();
                throw e2;
            }
        }
        return result;

}

private String getParamStr()
{
    String paramStr="";
    // 獲取所有響應頭字段
    Map<String, String> params = this._params;
    // 獲取參數列表組成參數字符串
    for (String key : params.keySet()) {
        paramStr+=key+"="+params.get(key)+"&";
    }
    //去除最后一個"&"
    paramStr=paramStr.substring(0, paramStr.length()-1);

    return paramStr;
}

} </pre>

 本文由用戶 cnp5 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!