2010-06-14 6 views
29

Ich habe ein kleines Stück Code, der im Grunde eine HTTP-Client, dämmt, d. H. Es POSTS-Anfrage und arbeitet mit Re-Antwort. Solange HTTP ist, kümmern sich alle gut. Aus irgendeinem Grund muss ich jetzt auch HTTPS unterstützen. Also hier ist kurz, was ich tun, um eine Verbindung zu erhalten geöffnet:Verwenden von Java-Klasse HttpsURLConnection

URL url = new URL(serverAddress); 
HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection(); 

dies nicht gelingt, die besagt:

sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to com.sun.net.ssl.HttpsURLConnection 

Ich denke, das irgendwie trivial ist, aber ich weiß einfach nicht, was ich mache ich falsch in diesem ... Googelte es, und der Code sieht einfach richtig aus - nicht?

alle Ideen sind willkommen!

+1

'com.sun.net.ssl.HttpsURLConnection' Warum werfen Sie auf diese private API? – McDowell

+0

Der Import wurde durch die automatische Auflösung von Eclipse erstellt. mein d'oh. – KB22

Antwort

26

Nur behalten Sie es java.net.URLConnection oder werfen Sie es stattdessen auf java.net.HttpURLConnection. Beide bieten Methoden an, um die gewünschte Aufgabe als gut zu erfüllen.


Eine Nebenbemerkung in keinem Zusammenhang mit dem technischen Problem: Sie sollten nie explizit importieren/verwenden Sun Java SE Implementierung spezifische Klassen in Ihrem Code. Dies sind nicht dokumentierte Klassen und unterliegen Änderungen, die beim Upgrade der JVM zu einem Code-Bruch führen können. Auf der anderen Seite kann Ihr Code auch brechen, wenn Sie ihn bei einer anderen JVM-Marke ausführen.


aktualisieren: da Sie scheinen haben es versehentlich importiert, gehen Sie zu Fenster> Einstellungen> Java> Darstellung> Typ Filter und hinzufügencom.sun.* und sun.* auf der Liste. Auf diese Weise werden Sie sie niemals versehentlich importieren. See screenshot.

3

Schwer zu sagen, ohne die ganze Datei zu sehen, aber es sieht so aus, als ob Sie com.sun.net.ssl.HttpsURLConnection importieren, wenn Sie javax.net.ssl.HttpsURLConnection wirklich wollen.

5

Ihre Importe überprüfen, sollten Sie

java.net.HttpURLConnection 

oder

javax.net.ssl.HttpsURLConnection 
7

Statt der Schaffung eines URL-Objekt mit Standard-Konstruktor wie

URL wsURL = new URL(url); 

Verwenden

java.net.URL wsURL = new URL(null, url,new sun.net.www.protocol.https.Handler()); 
012 verwenden

, die dieses Problem lösen würde

5

Überprüfen Sie den Wert Ihrer "ServerAddress" Variable. Es sollte https und nicht http

19

Ihr URL-Protokoll sollte auch https und nicht http sein. Überprüfen Sie Ihre URL.

13

Das obige Problem wird nur durch zwei Faktoren verursacht

  1. Mit falschem Import
  2. http in der Zeichenkette verwenden Sie URL aus der Benutzung statt https
+1

mit http statt https: yup - das hat mich. Danke für die Antwort ! – monojohnny

3

ändern erstellen:

import javax.net.ssl.HttpsURLConnection; 

und

URL url = new URL(serverAddress); 
HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection(); 

ändern:

import java.net.HttpURLConnection; 

und

URL url = new URL(serverAddress); 
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 
+1

Bitte erläutern Sie, warum dies das Problem beheben wird – user120242

0

In meinem Fall war das Protokoll und die Port nicht korrekt, während die HttpsURLConnection aufruft.

Port und Protokoll wurden als statische Klassenvariablen definiert. Und der Schritt vor dem fehlgeschlagenen Schritt war das Aufrufen einer httpUrlConnection. Diese Methode hat den Port/Protokoll in 80/http geändert, aber am Ende nicht auf/https zurückgesetzt. Also obwohl httpsUrlConnection aufgerufen wurde, verwendete es immer noch http/80. Sobald ich diese am Ende der httpUrlConnection-Methode zurückgesetzt habe, ist der Fehler verschwunden.

Verwandte Themen