Kimlik doğrulama gerektiren bir Rails Uygulama Sunucusuna bağlanmaya çalışıyorum. Java için Jakarta HTTP İstemcisi'ni bir Masaüstü uygulamasında kullanıyorum ve% 100 çalışıyor. Ama Android Emulator'da aynı kod yürütüldüğünde bir IOException alıyorum.Android Telefonlarda Temel HTTP Kimlik Doğrulaması Rails Server'a
İşte buradaki kod, ve eğer herkes bana niçin IOException'ı niçin takdir ettiğini anlayabilmeme yardımcı olabilir!
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;
}
Eğer t ilgili bölümlerini temin Could size yardımcı oluyor İz bırakıyor mu? –
InputStream için API başvurusu şu anlama gelir: Bu özet sınıfı tam olarak çalışan bir uygulama sağlamaz, bu nedenle alt sınıfın olması gerekir ve en azından read() yönteminin geçersiz kılınması gerekir. BufferedInputStream'i deneyin. – techiServices
adrese bağlanma nedeninin, Manifest'e Internet iznini eklemeyi unuttuğumu anladım. Ancak, şimdi cihaz "response = client.execute (get);" hat... –