web-dev-qa-db-fra.com

Utilisation de la classe Java HttpsURLConnection

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!

31
KB22

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: 

 enter image description here

27
BalusC

Le protocole de votre URL doit également être https et non http. Vérifiez votre URL.

19
Salman Zafar

Le problème ci-dessus est uniquement causé par deux problèmes

  1. Utiliser une mauvaise importation 
  2. En utilisant http dans la chaîne, vous créez une URL à utiliser à la place de https
13
user2505915

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

7
jsaevsah

Vérifiez la valeur de votre variable "serverAddress". Il faut https et non http

5
Dayanand Fagare

Vérifiez vos importations, vous devriez utiliser

Java.net.HttpURLConnection

ou

javax.net.ssl.HttpsURLConnection
5
DaveJohnston

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.

3
Mike Baranczak

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

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. 

0
AJC