J'ai un petit morceau de code qui implémente fondamentalement un client HTTP, C'est-à-dire. il POSTE la demande et fonctionne avec re rePONSE. Tant que HTTP est concerné, tout fonctionne correctement. Pour une raison quelconque, je dois maintenant prendre en charge HTTPS aussi. Voici donc brièvement ce que je fais pour ouvrir une connexion:
URL url = new URL(serverAddress);
HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection();
Cela échoue, déclarant:
Sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to com.Sun.net.ssl.HttpsURLConnection
Je suppose que c'est un peu trivial, mais je ne comprends tout simplement pas ce que je ne fais pas bien dans celui-ci… ...
toutes les idées sont appréciées!
Il suffit de le conserver Java.net.URLConnection
ou de le convertir en Java.net.HttpURLConnection
à la place. Les deux offres des méthodes pour faire la tâche désirée aussi bien.
Remarque secondaire sans rapport avec le problème technique: vous devez _ {jamais explicitement importer/utiliser des classes spécifiques à l'implémentation Sun Java SE dans votre code. Celles-ci sont des classes non documentées et sont sujettes à des modifications susceptibles de provoquer la rupture de votre code lors de la mise à niveau de la JVM. D'autre part, votre code peut également être endommagé lorsque vous l'exécutez sur une machine virtuelle Java de marque différente.
Mise à jour: comme vous semblez l'avoir importé accidentellement, accédez à Fenêtre> Préférences> Java> Apparence> Filtres de type} _ et Ajoutezcom.Sun.*
et Sun.*
à la liste. De cette façon, vous ne les importerez jamais accidentellement:
Le protocole de votre URL doit également être https et non http. Vérifiez votre URL.
Le problème ci-dessus est uniquement causé par deux problèmes
http
dans la chaîne, vous créez une URL à utiliser à la place de https
Au lieu de créer un objet URL en utilisant un constructeur standard comme
URL wsURL = new URL(url);
Utilisation
Java.net.URL wsURL = new URL(null, url,new Sun.net.www.protocol.https.Handler());
ce qui résoudrait ce problème
Vérifiez la valeur de votre variable "serverAddress". Il faut https et non http
Vérifiez vos importations, vous devriez utiliser
Java.net.HttpURLConnection
ou
javax.net.ssl.HttpsURLConnection
Difficile à dire sans voir le fichier en entier, mais il semble que vous importiez com.Sun.net.ssl.HttpsURLConnection lorsque vous voulez vraiment javax.net.ssl.HttpsURLConnection.
Changement:
import javax.net.ssl.HttpsURLConnection;
et
URL url = new URL(serverAddress);
HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection();
Changer en:
import Java.net.HttpURLConnection;
et
URL url = new URL(serverAddress);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
Dans mon cas, le protocole et le port n'étaient pas corrects lors de l'appel de la httpsUrlConnection.
Le port et le protocole ont été définis en tant que variables de classe statiques. Et l'étape antérieure à l'échec, appelait un httpUrlConnection. Cette méthode a changé le port/protocole en 80/http, mais ne l'a pas redéfini sur/https à la fin. Donc, même si httpsUrlConnection a été appelé, il utilisait toujours http/80. Une fois que j'ai réinitialisé ceux à la fin de la méthode httpUrlConnection, l'erreur a disparu.