Usando HttpURLConnection y HttpsURLConnection para conectarse a un https?
¿Cuáles son las diferencias si intento conectarme a un "https" usando HttpURLConnection
y HttpsURLConnection
?
Pude conectar a "https" usando HttpURLConnection
y HttpsURLConnection
así que estoy confundido. Pensé que sólo puedo establecer una conexión a un "https" si he utilizado HttpsURLConnection?
- Cómo detener HttpURLConnection conectar en Android
- Cómo configurar el encabezado de autorización (OAuth token) en una solicitud Android OKHTTPClient
- Android descargar problemas de archivo binario
- URLConnection getContentLength () devuelve un valor negativo
- ¿Por qué URLConnection tiempo de espera después de 6 + minutos en lugar de 5 segundos?
A continuación algunas de mis preguntas:
- Si pude abrir una conexión a un "https" usando HttpURLConnection, ¿mi conexión sigue en "https" o se convierte en "http"?
- ¿Qué tal la validación de los certificados? Puesto que no hice ningún
SSLSocketFactory
yHostnameVerifier
en miHttpURLConnection
mientras que conectaba con un "https", quéSSLSocketFactory
yHostnameVerifier
estoy usando? - ¿Significa que estoy confiando en todo sin importar si el certificado es de confianza o no?
- Android descargar pdf de url luego abrirlo con un lector de pdf
- Error de E / S durante la llamada al sistema,
- La sincronización bidireccional para las cookies entre HttpURLConnection (java.net.CookieManager) y WebView (android.webkit.CookieManager)
- No se puede ejecutar un AlertDialog en un método doInbackground ()
- Deteniendo reintentos silenciosos en HttpURLConnection
- Java.net.SocketTimeoutException: timeout
- Android Http url conexión Lanzar archivo no encontrado Excepción en getInputstream
- Enviando cadena UTF-8 usando HttpURLConnection
- HTTPS que se utiliza.
- Comportamientos predeterminados
- No estoy seguro pero lee abajo.
Acabo de escribir algún código como una prueba (ver todo el camino a continuación). Lo que acaba de suceder es la llamada URL.openConnection () le devolverá una clase libcore.net.http.HttpsURLConnectionImpl .
Esto es una implementación de HttpsURLConnection pero HttpsURLConnection hereda de HttpURLConnection. Así que está viendo polimorfismo en el trabajo.
Buscando más en el depurador, parece que la clase está utilizando los métodos predeterminados de fábrica.
HostnameVerifier = javax.net.ssl.DefaultHostnameVerifier
SslSocketFactory = org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl
Sobre la base de esto parece que los comportamientos predeterminados se están utilizando. No sé si eso significa que si confías en todo, pero definitivamente estás estableciendo una conexión HTTPS.
La documentación sugiere que la conexión confía automáticamente en CAs que son bien conocidas pero que no se auto-firman. (Ver más abajo) No he probado esto, pero tienen código de ejemplo sobre cómo lograr que aquí .
Si una aplicación desea confiar en certificados de Autoridad de certificación (CA) que no forman parte del sistema, debe especificar su propio X509TrustManager a través de un conjunto SSLSocketFactory en HttpsURLConnection.
Runnable r = new Runnable() { public void run() { try { URL test = new URL("https://www.google.com/"); HttpURLConnection connection = (HttpURLConnection) test.openConnection(); InputStream is = connection.getInputStream(); StringWriter sw = new StringWriter(); String value = new java.util.Scanner(is).useDelimiter("\\A").next(); Log.w("GOOGLE", value); } catch(Exception e) { Log.e("Test", e.getMessage()); } } }; Thread t = new Thread(r); t.start();
- Android / Java: Guardar una matriz de bytes en un archivo (.jpeg)
- Actividad que se desliza de abajo a arriba pero la actividad de fondo no debe moverse