2016-03-30 8 views
-1

Also, ich habe ein wenig Code, der wie folgt aussieht:SSLHandshakeException wenn Antwort ist 204 (kein Inhalt)

try { 
    URL url = new URL(url_raw); 
    HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
    /*snip*/ 
    connection.connect(); 
    int response_code = connection.getResponseCode(); <-- Error here 
/*snip*/ 
  • Wenn die URL zurückgibt 204 ohne Inhalt, erhalte ich eine ausgelöste Ausnahme.
  • Wenn die URL 204 zurückgibt, aber Inhalt hat, bekomme ich eine Ausnahme geworfen.
  • Wenn die URL nicht-204-Code mit Inhalt zurückgibt, bin ich in Ordnung. (Sagen wir 200 mit einer "Erfolg" Nachricht).

Das Fehlerprotokoll ist hier:

W/System.err﹕ javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x5f5d07c0: Failure in SSL library, usually a protocol error 
W/System.err﹕ error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:744 0x5d908d74:0x00000000) 
W/System.err﹕ at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:449) 
W/System.err﹕ at com.android.okhttp.Connection.upgradeToTls(Connection.java:146) 
W/System.err﹕ at com.android.okhttp.Connection.connect(Connection.java:107) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503) 
W/System.err﹕ at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) 

ich, um das Problem, indem er nie zurückkehren 204 arbeiten könnte, aber es scheint nur, wie zu viel von einem Hack =/

+0

Wenn Sie einen URL-Rückgabecode von irgendetwas erhalten haben, muss der Handshake erfolgreich gewesen sein. Wenn Sie eine Handshake-Ausnahme haben, können Sie möglicherweise auch keinen URL-Returncode erhalten. Bitte klären Sie. – EJP

Antwort

0
W/System.err﹕ at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:449) 
W/System.err﹕ at com.android.okhttp.Connection.upgradeToTls(Connection.java:146) 
W/System.err﹕ at com.android.okhttp.Connection.connect(Connection.java:107) 

Nach Diese Ablaufverfolgung schlägt innerhalb des anfänglichen TLS-Handshakes fehl. Der TLS-Handshake einer HTTPS-Verbindung muss abgeschlossen sein, bevor die HTTP-Anfrage gesendet wird und bevor die HTTP-Antwort gelesen wird. Da es bereits innerhalb des TLS-Handshakes und somit vor dem Empfang des Statuscodes versagt, kann das Problem nicht mit dem Statuscode selbst in Verbindung gebracht werden.

Stattdessen müssen Sie auf der Serverseite nach Implementierungsfehlern suchen und nicht auf der Clientseite. Meine Vermutung ist, dass der Server defekt ist und im Fall von 204 keinen TLS-Handshake durchführt, aber da keine Informationen über diesen Server bereitgestellt werden, ist dies nur eine wilde Vermutung.

Verwandte Themen