1

SSL証明書の検証なしでPOSTデータをHTTPSURLに送信できるようにする方法と、そのリクエストからhtml(実際にはxmlデータ)を取得する方法を知りたいです。

これまでのところ、私は次のものを持っています:

public void sendPost(final String request, final String urlParameters) throws IOException {

    URL url = new URL(request); 
    HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();           
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setInstanceFollowRedirects(false); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    connection.setRequestProperty("charset", "utf-8");
    connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
    connection.setUseCaches (false);

    DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();
    connection.disconnect();        

}

だから私は次のことを知る必要があります:

  • SSL証明書の検証を無視する方法
  • そのリクエストからHTMLデータを取得する方法

ありがとうございました

4

1 に答える 1

1

基本的にあなたはあなた自身を設定する必要がありHostnameVerifierますHttpsUrlConnection

connection.setHostnameVerifier( new AlwaysTrustHostnameVerifier() );

どこ

class AlwaysTrustHostnameVerifier implements X509TrustManager 
{
    public void checkClientTrusted( X509Certificate[] x509 , String authType ) throws CertificateException { /* nothing */ }
    public void checkServerTrusted( X509Certificate[] x509 , String authType ) throws CertificateException { /* nothing */ }
    public X509Certificate[] getAcceptedIssuers() { return null; }      
}

重要なのは、証明書チェーンが信頼されていない場合はcheck*メソッドがスローする必要があるということです。この場合、これは無視する必要があります。CertificateException

乾杯、

于 2013-01-28T10:33:55.593 に答える