En Java, cómo crear HttpsURLConnection o HttpURLConnection basado en la url?

StackOverflow https://stackoverflow.com/questions/945003

  •  09-09-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un proyecto en el que estoy creando una clase para ejecutar las peticiones de cliente HTTP (mi clase actúa como un cliente). Se necesita de una URL y un método de petición (GET, POST, PUT, etc.) y quiero ser capaz de analizar la URL y abrir una HttpsURLConnection o HttpURLConnection en función de si es https o http (asumen las URL dadas serán siempre correcta).

Si hago lo siguiente:

URLConnection conn = url.openConnection();

A continuación, que creará automáticamente una URLConnection que puede aceptar HTTP y HTTPS, pero si hago esto, entonces no puedo encontrar ninguna manera de establecer un método de petición (GET, POST, etc), ya que sólo la HttpsURLConnection o HttpURLConnection las clases tienen el método setRequestMethod.

Si hago algo como lo siguiente:

if(is_https)
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
else
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

A continuación, se crean las conexiones, pero no puedo acceder a ellos fuera del si los bloques.

¿Es posible hacer esto, o debería simplemente renunciar y utilizar las clases Apache HttpClient?

¿Fue útil?

Solución

HttpsURLConnection extiende HttpURLConnection , por lo que no es necesario el HttpsURLConnection, se Sólo puede hacer

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

Otros consejos

desde HttpsURLConnection extends HttpURLConnection se puede declarar como conn HttpsURLConnection. De esta manera se puede acceder a la interfaz común (setRequestMethod()).

Con el fin de tener acceso a los métodos de extensión (como getCipherSuite(), que se define sólo en el HttpsURLConnection clase hija) tiene que usar un yeso después de un instanceof

if (conn instanceof HttpsURLConnection) {
    HttpsURLConnection secured = (HttpsURLConnection) conn;
    String cipher = secured.getCipherSuite();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top