2013-09-16 4 views
0

Я пытаюсь запустить пример программы, которая не работает при вызове getCipherSuite() с java.lang.IllegalStateException: connection not yet open exception. Соединение открыто, поэтому не уверен, почему это происходит. Я использую java версию 1.6.0_18Ошибка при вызове HttpsURLConnection.getCipherSuite()

Кто-нибудь знает, почему это исключение поднимает?

Спасибо.

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); 
    } 

} 

ответ

1

Это происходит именно по той причине, что указано в исключении. Вы вызываете его перед открытием cnnextion. Решение: вызвать его после, то есть после вызова getInputStream(), getResponseCode() и т. Д.

+0

Он вызывается после getResponseCode(). Я называю это сразу после этого. Код ответа, который я возвращаю, равен 302. – Paul

+0

Предлагаю вам отправить больше кода. То, что вы опубликовали, пока ничего не показывает. – EJP

+0

Вызов метода getResponseCode включен в метод dump_features (прокрутка вниз); Он завернут в вызов методу печати, то есть (печать («Код состояния:» + conn.getResponseCode());) Затем я вызываю getCipherSuite в следующей строке после этого таким же образом. – Paul

Смежные вопросы