vista web android con conexión https y autenticación básica. ¿Cómo conseguir este trabajo?

He investigado y investigado e investigado esto hasta que he ido gris y calvo. ¿Cómo debo conseguir una webview para trabajar en un sitio que necesita la autenticación básica http sobre una conexión https en un nivel de api 8+

Tengo el siguiente código

String email = Util.getEmail(this); String pwd = Util.getPassword(this); webview.getSettings().setJavaScriptEnabled(true); webview.setHttpAuthUsernamePassword(Config.SERVER_BASE_URL, "Application", email, pwd); // webview.setWebViewClient(new MobileWebViewClient(this)); webview.loadUrl(url); 

Como usted puede ver que tenía un cliente de la visión de la tela (ahora comentado hacia fuera) que anula el método onReceivedHttpAuthRequest que parece esto

 @Override public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm){ String email = Util.getEmail(wvContext); String pwd = Util.getPassword(wvContext); if(!pwd.equalsIgnoreCase("-1") && !pwd.equalsIgnoreCase("-1")){ handler.proceed(email, pwd); } } 

Esto se utilizó sin la webview.setHttpAuthUsernamePassword y funciona bien, excepto que significa que 2 solicitudes se publican en el sitio web – El primero recibe un 401 y luego el cliente entra en acción con la autorización de cosas Esto está bien para una pequeña cantidad de tráfico del sitio web, la cantidad de tráfico (en la actualidad el promedio de 49 solicitudes p / m) es el nombre del juego ahora mismo!

He leído que puedo suministrar las credenciales de forma preemptiva utilizando

 webview.setHttpAuthUsernamePassword(Config.SERVER_BASE_URL, "Application", email, pwd); 

Sin embargo, esto sólo resulta en Http Básico: Errores de acceso denegado La constante de url de base de servidor es el nombre de dominio para el sitio, es decir, https://example.com (sin la página) la url real es https://example.com/some_pages . No importa si uso la url completa o el dominio. He comprobado el reino y tengo eso correcto y he utilizado apenas las cadenas vacías que proporcionan solamente email y contraseña. ¿Podría esto ser algo hacer con el hecho de que el sitio está utilizando https? Mi código parece funcionar bien en mi caja de dev sin https, pero que puede ser un arenque rojo.!

Las únicas preguntas de desbordamiento de pila que parecen cubrir mis necesidades no han recibido respuestas aceptadas y los documentos no son una ayuda que pueda ver.

Tengo ahora una abolladura tan grande en mi cabeza de golpearla contra una pared de ladrillo que estoy pensando de conseguir un sombrero cuadrado.

Por favor, si alguien puede darme la solución a esto voy a estar para siempre en su deuda! Incluso podría enviarle un KitKat por correo electrónico

Este ejemplo simple abusa de una página en HttpWatch ya que es más divertido con un ejemplo público que funciona.

El recurso en cuestión, https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx?randomgarbage utiliza autenticación básica sobre HTTPS y se puede cargar sin fallos de autenticación como este (probado con Android 2.3.7):

  WebView v = ...; // Your webview goes here. try { HashMap<String, String> map = new HashMap<String, String>(); // This test service takes the username "httpwatch" and a random // password. Repeating a password can lead to failure, so we create // a decently random one using UUID. String usernameRandomPassword = "httpwatch:" + UUID.randomUUID().toString(); String authorization = "Basic " + Base64.encodeToString(usernameRandomPassword.getBytes("UTF-8"), Base64.NO_WRAP); map.put("Authorization", authorization); v.loadUrl("https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx?" + System.currentTimeMillis(), map); } catch (UnsupportedEncodingException e) {} 

Esto funciona en ICS y Gingerbread. No tiene acceso a nada más antiguo, pero loadUrl(String, Map<String,String>) fue introducido en el nivel 8 de la API, por lo que no veo por qué no debería funcionar para eso.

Aclaración para el pañal:

Para admitir la autenticación para solicitudes posteriores, proporcione un WebViewClient y realice lo siguiente:

  webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url, <your map containing the Authorization header>); return true; } }); 

Funcionará para la URL de https. En esto si estamos consiguiendo Untrusted_cer entonces lo ignoraremos

  webview.setWebViewClient(new WebViewClient(){ @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { super.onReceivedHttpAuthRequest(view, handler, host, realm); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { super.onReceivedSslError(view, handler, error); if(error.getPrimaryError()==SslError.SSL_UNTRUSTED){ handler.proceed(); }else{ handler.proceed(); } } }); 

No tengo ni idea sobre el segundo problema

para manejar la autorización en su sitio, simplemente anule el siguiente método en su webViewClient y agregue el nombre de usuario y la contraseña en su manejador.

 @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { handler.proceed(StringUtils.AUTH_NAME,StringUtils.AUTH_PASS); } 
  • Habilitar teclado de correo electrónico en android para el tipo de entrada de correo electrónico
  • Subir una imagen de cámara o galería en WebView
  • ¿Cómo manejar el cambio de parámetro shouldInterceptRequest en API21?
  • Incorporación de una vista web en otra vista
  • Android: cómo agregar un teclado virtual personalizado cuando se selecciona el campo de formulario en WebView
  • ¿Cómo abrir el enlace WebView a una nueva actividad?
  • Android No se permite cargar recursos locales: file: /// android_asset
  • El teclado de Android WebView oculta el campo de entrada en el fragmento en android
  • M_mainFrame-> editor () -> hasComposition no emitir
  • ¿Cómo puedo validar un android.net.http.SsLCertificate con un X509TrustManager?
  • Las funcionalidades de JQuery no funcionan cuando carga los datos html de una cadena en webview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.