En Java, cómo crear HttpsURLConnection o HttpURLConnection basado en la url?
-
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?
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();
}