0

の呼び出しに失敗するサンプル プログラムを実行しようとしてgetCipherSuite()java.lang.IllegalStateException: connection not yet open exceptionます。接続は開いているので、なぜこれが起こっているのかわかりません。私はJavaバージョン1.6.0_18を使用しています

これが例外である理由を知っている人はいますか?

ありがとう。

package web.services.https;

import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import java.net.MalformedURLException;
import java.security.cert.Certificate;
import java.io.IOException;

public class SunClient {

  private static final String url_s = "https://java.sun.com:443";

  public static void main(String[] args) {
    new SunClient().do_it();
  }

  private void do_it() {

    try {
        URL url = new URL(url_s);
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setDoInput(true);
        conn.setRequestMethod("GET");
        conn.connect();

        System.out.println("\nConnected ...\n");

        dump_features(conn);
    }

    catch(MalformedURLException e) {
        System.err.println("MalformedURLException exception: " + e);
    }

    catch(IOException e) {
        System.err.println("IOException exception: " + e);
    }

  }

  private void dump_features(HttpsURLConnection conn) {

    try {

        Certificate[] certs = conn.getServerCertificates();

        for(Certificate cert: certs) {
            print("\tCert. type: " + cert.getType());
            print("\tHash code: " + cert.hashCode());
            print("\tAlgorithm: " + cert.getPublicKey().getAlgorithm());
            print("\tFormat: " + cert.getPublicKey().getFormat());
            print("");
        }

        print("Status code: " + conn.getResponseCode());
        print("Cipher suite: " + conn.getCipherSuite());

    }

    catch(Exception e) {
        System.err.println("Exception exception: " + e);
    }

  }

  private void print(String s) {
    System.out.println(s);
  }

}
4

1 に答える 1

1

例外に記載されている理由とまったく同じ理由で発生しています。cnnextion が開く前に呼び出しています。解決策: 後で呼び出します。つまり、getInputStream()、getResponseCode() などを呼び出した後に呼び出します。

于 2013-09-16T19:28:55.490 に答える