Базовая аутентификация HTTP на телефонах Android для Rails-сервера

Я пытаюсь подключиться к Rails Application Server, для которого требуется аутентификация. Я использую Jakarta HTTP Client для Java на настольном приложении, и он работает на 100%. Но когда тот же самый код выполняется на эмуляторе Android, я получаю исключение IOException.

Вот код, и если кто-нибудь может помочь мне понять, почему он бросает IOException, что было бы очень полезно!

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; } 

Solutions Collecting From Web of "Базовая аутентификация HTTP на телефонах Android для Rails-сервера"

Причина, по которой он продолжал запускать IOException, состоял в том, что файл манифеста не предоставил права приложения в Интернете

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

Я использую HttpPost для этой задачи и никогда не испытывал никаких проблем:

 [...] 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(); [...] 

Возможно, это поможет вам