La mejor manera de interceptar una solicitud de WebView en Android

Estoy utilizando un WebView en mi aplicación en la que debo interceptar las solicitudes. Actualmente estoy usando el código follwing para hacerlo.

 public WebResourceResponse shouldInterceptRequest (WebView view, String url) { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setRequestProperty("User-Agent", userAgent); String mime; if (url.lastIndexOf('.') > url.lastIndexOf('/')) { String ext = url.substring(url.lastIndexOf('.') + 1); mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext); } else { mime = "text/html"; } return new WebResourceResponse(mime, "UTF-8", conn.getInputStream()); } 

Por encima del código funciona bien en la mayoría de los casos, pero no todo. Por ejemplo, cuando intento iniciar sesión en Outlook, sólo muestra que mi correo electrónico o contraseña es incorrecta, también he visto otros casos en los que las solicitudes se rompen, pero todo funciona bien si me quite shouldInterceptRequest .

¿Hay alguna mejor manera que la que estoy utilizando actualmente para interceptar las solicitudes?

Hay dos problemas con el código

  1. Detección de extensión incorrecta

Por ejemplo, cuando el código intenta obtener la extensión de recurso para esta URL:

 https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=12&ct=1442476202&rver=6.4.6456.0&wp=MBI_SSL_SHARED&wreply=https:%2F%2Fmail.live.com%2Fdefault.aspx%3Frru%3Dinbox&lc=1033&id=64855&mkt=en-us&cbcxt=mai 

aspx%3Frru%3Dinbox&lc=1033&id=64855&mkt=en-us&cbcxt=mai cual es incorrecto. Hay un método especial para obtener la extensión de la URL: getFileExtensionFromUrl ()

  1. De acuerdo con el método de documentación MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext) puede devolver null . En este caso, el código establece un tipo de mime incorrecto para la página.

Aquí está el código de método que tiene en cuenta estos dos problemas

 @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { String ext = MimeTypeMap.getFileExtensionFromUrl(url); String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext); if (mime == null) { return super.shouldInterceptRequest(view, url); } else { HttpURLConnection conn = (HttpURLConnection) new URL( url).openConnection(); conn.setRequestProperty("User-Agent", userAgent); return new WebResourceResponse(mime, "UTF-8", conn.getInputStream()); } } 
  • Android: ¿Cómo hacer que mi idioma de soporte de webview mientras carga una url?
  • Impedir que la div clicable se destaque en Android WebView
  • Caída de la aplicación en Android 5.0.x
  • Abrir URL en webView en android
  • Cómo cargar un archivo js de los elementos en la vista web después de cargar html
  • Prevención de la autolinking de correos electrónicos y URLs en un WebView de Android
  • Android webview cargar Javascript local
  • ¿Cómo paso valores de retorno de una función javascript a android?
  • Obtener el ancho de contenido de Android WebView con desplazamiento vertical después de cargar la página
  • Cargar una div en una vista web en Android
  • Cómo modificar el contenido antes de representar en Android WebView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.