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.

5voto

Dayanand Fagare Points 31

Vérifiez la valeur de votre variable "serverAddress". Elle devrait être en https et non en http

4voto

Mike Baranczak Points 4425

Difficile à dire sans voir le fichier complet, mais il semble que vous importiez com.sun.net.ssl.HttpsURLConnection alors que vous voulez réellement javax.net.ssl.HttpsURLConnection.

4voto

Geanluca Points 41

Changer :

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

0voto

AJC Points 406

Dans mon cas, le protocole et le port n'étaient pas corrects lors de l'invocation de httpsUrlConnection.

Le port et le protocole étaient définis en tant que variables de classe statiques. Et l'étape précédant l'étape en échec était l'invocation d'une httpUrlConnection. Cette méthode a modifié le port/protocole en 80/http, mais ne l'a pas remis à /https à la fin. Donc même si httpsUrlConnection était invoqué, il utilisait toujours http/80. Une fois que j'ai réinitialisé ces valeurs à la fin de la méthode httpUrlConnection, l'erreur a disparu.

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