32 votes

En utilisant la classe Java HttpsURLConnection

J'ai un petit morceau de code qui met essentiellement en œuvre un client HTTP, c'est-à-dire qu'il envoie des requêtes POST et fonctionne avec la réponse. Tant que HTTP est concerné, tout fonctionne bien. Pour une raison quelconque, je dois maintenant supporter HTTPS aussi. Voici brièvement ce que je fais pour ouvrir une connexion :

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

Cela échoue, en indiquant :

sun.net.www.protocol.https.HttpsURLConnectionImpl ne peut pas être converti en com.sun.net.ssl.HttpsURLConnection

Je suppose que c'est un peu trivial, mais je ne comprends pas ce que je fais de mal dans celui-ci... J'ai cherché sur Google, et le code semble juste - non ?

Toutes les idées sont appréciées !

2 votes

com.sun.net.ssl.HttpsURLConnection Pourquoi faites-vous un cast vers cette API privée ?

0 votes

L'import a été créé par la résolution automatique d'Eclipse. mon d'oh.

29voto

BalusC Points 498232

Gardez simplement java.net.URLConnection ou convertissez-le en java.net.HttpURLConnection à la place. Les deux offrent des méthodes pour accomplir la tâche souhaitée aussi bien.


Une remarque annexe non liée au problème technique : vous ne devriez jamais importer/utiliser explicitement des classes spécifiques à l'implémentation de Sun Java SE dans votre code. Ces classes ne sont pas documentées et sont sujettes à des changements qui pourraient causer des problèmes lorsque vous mettez à jour la JVM. D'autre part, votre code pourrait également ne pas fonctionner lorsque vous l'exécutez sur une JVM d'une autre marque.


Mise à jour : comme il semble que vous l'ayez importé accidentellement, allez dans Fenêtre > Préférences > Java > Apparence > Filtres de types et Ajoutez com.sun.* et sun.* à la liste. De cette façon, vous ne les importerez jamais par accident :

enter image description here

19voto

Salman Zafar Points 51

Le protocole de votre URL doit également être https et non http. Veuillez vérifier votre URL.

13voto

user2505915 Points 9

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

  1. Utilisation d'une mauvaise importation
  2. Utilisation de http dans la chaîne que vous créez une url à partir utilisez plutôt https

7voto

jsaevsah Points 51

Au lieu de créer un objet URL en utilisant le constructeur standard comme

URL wsURL = new URL(url);

Utilisez

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

ce qui résoudrait ce problème

6voto

DaveJohnston Points 5475

Vérifiez vos imports, vous devriez utiliser

java.net.HttpURLConnection

ou

javax.net.ssl.HttpsURLConnection

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X