Autenticación HTTP básica en los teléfonos Android a Rails Server

Estoy intentando conectarme a un servidor de aplicaciones de Rails que requiere autenticación. Estoy utilizando el cliente Jakarta HTTP para Java en una aplicación de escritorio y funciona 100%. Pero cuando se ejecuta exactamente el mismo código en el emulador de Android, obtengo una IOException.

Aquí está el código, y si alguien me podría ayudar a averiguar por qué lanza la IOException que sería muy apreciada!

private boolean login() { String username, password; DefaultHttpClient client; AuthScope scope; Credentials myCredentials; CredentialsProvider provider; HttpEntity entity; String line; BufferedReader reader; InputStream instream; //Declare & Create the HTTP Client client = new DefaultHttpClient(); //Create our AuthScope scope = new AuthScope("10.19.9.33", 3000); username = "admin" password = "pass" //Set Credentials myCredentials = new UsernamePasswordCredentials( username, password ); //Set Provider provider = new BasicCredentialsProvider(); provider.setCredentials(scope, myCredentials); //Set Credentials client.setCredentialsProvider( provider ); String url = "http://10.19.9.33:3000/users/show/2"; HttpGet get; //Tell where to get get = new HttpGet( url ); HttpResponse response; try { response = client.execute( get ); entity = response.getEntity(); /* Check to see if it exists */ if( entity != null ) { instream = entity.getContent(); try { reader = new BufferedReader(new InputStreamReader(instream)); line = reader.readLine(); if( line.equals( "HTTP Basic: Access denied.") ) return false; while ( line != null ) { // do something useful with the response System.out.println(line); line = reader.readLine(); } return true; } catch (IOException ex) { // In case of an IOException the connection will be released // back to the connection manager automatically throw ex; } catch (RuntimeException ex) { // In case of an unexpected exception you may want to abort // the HTTP request in order to shut down the underlying // connection and release it back to the connection manager. get.abort(); throw ex; } finally { // Closing the input stream will trigger connection release instream.close(); } } } catch( ClientProtocolException cp_ex ) { } catch( IOException io_ex ) { } return false; } 

La razón por la que siguió activando la excepción IOException fue porque el archivo de manifiesto no dio los derechos de aplicación a Internet

 <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

Estoy usando HttpPost para este tipo de tarea, y nunca tuve ningún problema:

 [...] DefaultHttpClient client = new DefaultHttpClient(); HttpPost httppost = new HttpPost(LOGIN_SERVLET_URI); List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); params.add(new BasicNameValuePair("userName", userName)); params.add(new BasicNameValuePair("password", password)); UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); httppost.setEntity(p_entity); HttpResponse response = client.execute(httppost); HttpEntity responseEntity = response.getEntity(); [...] 

Tal vez esto te ayuda

  • Esfera 3D OpenGL
  • ¿Cómo generar el gráfico de llamadas desde Android APK?
  • Buen diseño de la interfaz de usuario: ¿Cómo manejar ListView vacío?
  • Android RelativeLayout cambia de color onClick
  • OutOfMemoryException al descifrar el archivo usando facebook ocultar
  • ID canónico de GCM
  • ¿Por qué android.app.Activity no es abstracto por diseño?
  • ¿Cómo implementar un singleton configurable?
  • Actividades cargando xml diseño dinámicamente en android
  • ¿Qué significan los iconos del módulo en Android Studio?
  • JSONParser no se puede resolver a un tipo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.