setrequestproperty example java https

java - example - httpurlconnection post json



Usando la clase java HttpsURLConnection (9)

Comprueba tus importaciones, deberías estar usando

java.net.HttpURLConnection

o

javax.net.ssl.HttpsURLConnection

Tengo un pequeño fragmento de código que básicamente impone un HTTP-Client, es decir, POSTS request y funciona con re RESPONSE. Siempre que HTTP esté previsto, todo funcionará bien. Por alguna razón, ahora también tengo que admitir HTTPS. Así que aquí está brevemente lo que hago para abrir una conexión:

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

Esto falla, indicando:

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

Supongo que esto es un poco trivial, pero simplemente no entiendo lo que estoy haciendo mal en este ... Lo busqué en Google, y el código se ve bien, ¿no?

cualquier idea es apreciada!


Compruebe el valor de su variable "serverAddress". Debería https y no http


Difícil de ver sin ver todo el archivo, pero parece que está importando com.sun.net.ssl.HttpsURLConnection cuando realmente quiere javax.net.ssl.HttpsURLConnection.


El problema anterior solo es causado por dos problemas

  1. Usando la importación incorrecta
  2. Al usar http en la cadena, se crea url a partir del uso en lugar de https

El protocolo de tu url también debe ser https y no http. Revisa tu url


En lugar de crear un objeto URL usando un constructor estándar como

URL wsURL = new URL(url);

Utilizar

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

que resolvería este problema


En mi caso, el protocolo y el puerto no eran correctos al invocar httpsUrlConnection.

El puerto y el protocolo se definieron como variables de clase estáticas. Y el paso anterior al paso fallido, invocaba una httpUrlConnection. Ese método cambió el puerto / protocolo a 80 / http, pero no lo configuró a / https al final. Así que aunque se invocó httpsUrlConnection, aún se estaba usando http / 80. Una vez que reinicié esos al final del método httpUrlConnection, el error desapareció.


Solo guárdelo en java.net.URLConnection o en su lugar en java.net.HttpURLConnection . Ambos ofrecen métodos para hacer la tarea deseada como buena.

Una observación adicional no relacionada con el problema técnico: nunca debe importar explícitamente / usar clases específicas de implementación de Sun Java SE en su código. Esas son clases no documentadas y están sujetas a cambios que pueden causar la ruptura de su código cuando actualiza la JVM. Por otro lado, su código también puede romperse cuando lo ejecuta en una JVM de marca diferente.

Actualización : dado que parece que accidentalmente lo ha importado, vaya a Ventana> Preferencias> Java> Apariencia> Escriba filtros y Agregue com.sun.* Y sun.* la lista. De esta forma, nunca los importará accidentalmente. Ver captura de pantalla .


Cambio:

import javax.net.ssl.HttpsURLConnection;

y

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

Cambiar a:

import java.net.HttpURLConnection;

y

URL url = new URL(serverAddress); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();