2013-09-15 4 views
2

Я пишу приложение для Android, которое должно пройти аутентификацию с сервера, отправив запрос HTTP POST.Различные ответы HTTP от приложения Android и приложения Java

При запуске как обычное приложение Java на моем рабочем столе я получаю код ответа 200 OK, когда имя пользователя и пароль действительны, а значение 302 найдено, когда они нет (из браузера, ввод неверных переадресаций имени пользователя и пароля на страница, в которой говорится, что вы несанкционированы).

Однако при запуске моего приложения для Android я получаю 200 OK каждый раз, независимо от срока действия пароля.

Вот код:

public static boolean authenticate(String user, String pass) { 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("https://website.com/login"); 

    try 
    { 
     // Add form parameters to request 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("basic", "true")); 
     params.add(new BasicNameValuePair("j_username", user)); 
     params.add(new BasicNameValuePair ("j_password", pass)); 
     post.setEntity(new UrlEncodedFormEntity(params)); 


     // execute post request 
     HttpResponse response = client.execute(post); 
     int status = response.getStatusLine().getStatusCode(); 
     System.out.println("POST RESPONSE STATUS = " + status + ": " + response.getStatusLine().toString()); 

     // success if we get 200 OK 
     // something went wrong if we get a 302 Found 
     if (status == 200) { 
      return true; 
     } else if (status == 302) { 
      return false; 
     } else { 
      System.out.println("Unknown response status: " + status); 
      return false; 
     } 

    } 
    catch (IOException e) 
    { 
     System.out.println("IOException trying to authenticate: " + e.getMessage()); 
    } 

    return false; 
} 

Использование Netcat, я пытался посылать запрос на моем собственном компьютере, чтобы инспектировать заголовки.

При выполнении из рабочего стола это то, что посылается:

[email protected] ~ $ nc -l -p 8080 
POST/HTTP/1.1 
Content-Length: 51 
Content-Type: application/x-www-form-urlencoded 
Host: 192.168.2.17:8080 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.2.3 (java 1.5) 

basic=true&j_username=bob14&j_password=meow%21 

При запуске на моем Android 4.1 таблетки это посылается:

[email protected] ~ $ nc -l -p 8080 
POST/HTTP/1.1 
Content-Length: 51 
Content-Type: application/x-www-form-urlencoded 
Host: 192.168.2.17:8080 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4) 

basic=true&j_username=bob14&j_password=meow%21 

Я думал, что это может быть связано с агентом пользователя, Я попробовал пустую строку, а также «Apache-HttpClient/4.2.3 (java 1.5)», и ни одна из них не изменилась.

Проект установлен в Eclipse для использования библиотек httpcore-4.2.2.jar и httpclient-4.2.3.jar. Проект Android также зависит от сообщества commons-httpclient-3.1.jar.

Кто-нибудь видит, почему запросы получают разные ответы?

+0

Там должно быть что-то не показывают нам. «Пользователь-агент» действительно не должен влиять на запрос. –

+0

Используйте что-то вроде Firefox Live HTTP Headers и записывайте ответ на запрос Desktop в обоих случаях - правильные и неправильные пароли. Сравните это с запросом/ответом с вашего планшета. Возможно также, что целевой сайт перенаправляет запрос с вашего пользовательского агента приложения на мобильный сайт или сам сайт дает разные ответы на мобильный пользовательский агент вашего приложения. Попробовать пользовательский агент Desktop из приложения - еще одна идея. – parry

ответ

0

Возможно, класс HttpClient для Android не перенаправляется по умолчанию, когда вы отправляете POST через https.

Попробуйте без SSL для целей тестирования.

Here's another related question

+0

На самом деле проблема заключается в HttpClient IS после перенаправления по умолчанию на Android. Отличная ссылка, я смог решить свою проблему, добавив следующую строку: 'HttpClientParams.setRedirecting (post.getParams(), false);' – user2781858

Смежные вопросы