it-swarm.com.de

Verwendung der Java-Klasse HttpsURLConnection

Ich habe ein kleines Stück Code, das im Wesentlichen einen HTTP-Client zwingt. es POSTS fordert und arbeitet mit re RESPONSE. Solange HTTP Ist, kann alles gut funktionieren. Aus irgendeinem Grund muss ich jetzt auch HTTPS unterstützen. Also hier kurz was ich mache um eine Verbindung aufzubauen:

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

Dies schlägt fehl und besagt:

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

Ich denke, das ist ein bisschen trivial, aber ich verstehe nicht, was ich in diesem hier falsch mache ... Googled es, und der Code sieht einfach richtig aus - nicht?

ideen werden geschätzt!

31
KB22

Behalten Sie es einfach Java.net.URLConnection oder wandeln Sie es stattdessen in Java.net.HttpURLConnection . Beide bieten Methoden an, um die gewünschte Aufgabe als gut zu erledigen.


Eine Randbemerkung, die sich nicht auf das technische Problem bezieht: Sie sollten niemals explizit Sun Java SE-implementierungsspezifische Klassen in Ihren Code importieren/verwenden. Hierbei handelt es sich um undokumentierte Klassen, die Änderungen unterworfen sind, die beim Upgrade der JVM zu Code-Fehlern führen können. Auf der anderen Seite kann Ihr Code auch beschädigt werden, wenn Sie ihn unter einer anderen Marken-JVM ausführen.


Update: Da Sie es scheinbar aus Versehen importiert haben, gehen Sie zu Fenster> Einstellungen> Java> Darstellung> Typenfilter und Hinzufügencom.Sun.* und Sun.* zur Liste. Auf diese Weise werden Sie sie niemals aus Versehen importieren: 

 enter image description here

27
BalusC

Das Protokoll Ihrer URL sollte ebenfalls https und nicht http sein. Überprüfen Sie Ihre URL.

19
Salman Zafar

Das obige Problem wird nur durch zwei Probleme verursacht

  1. Falscher Import verwenden 
  2. Verwenden Sie http in der Zeichenfolge, um stattdessen https zu verwenden.
13
user2505915

Anstatt ein URL-Objekt mithilfe eines Standardkonstruktors wie zu erstellen

URL wsURL = new URL(url);

Benutzen

Java.net.URL wsURL = new URL(null, url,new Sun.net.www.protocol.https.Handler());

das würde dieses Problem lösen

7
jsaevsah

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

5
Dayanand Fagare

Überprüfen Sie Ihre Importe, die Sie verwenden sollten

Java.net.HttpURLConnection

oder

javax.net.ssl.HttpsURLConnection
5
DaveJohnston

Schwer zu sagen, ohne die gesamte Datei zu sehen, aber es sieht so aus, als würden Sie com.Sun.net.ssl.HttpsURLConnection importieren, wenn Sie wirklich javax.net.ssl.HttpsURLConnection wünschen.

3
Mike Baranczak

Veränderung:

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();
3
Geanluca

In meinem Fall waren das Protokoll und der Port beim Aufrufen der httpsUrlConnection nicht korrekt. 

Port und Protokoll wurden als statische Klassenvariablen definiert. Der Schritt vor dem fehlgeschlagenen Schritt bestand im Aufrufen einer httpUrlConnection. Diese Methode hat den Port/das Protokoll in 80/http geändert, aber am Ende nicht wieder auf/https gesetzt. Obwohl httpsUrlConnection aufgerufen wurde, wurde dennoch http/80 verwendet. Nachdem ich diese am Ende der httpUrlConnection-Methode zurückgesetzt habe, ist der Fehler verschwunden. 

0
AJC