Я пишу приложение для 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.
Кто-нибудь видит, почему запросы получают разные ответы?
Там должно быть что-то не показывают нам. «Пользователь-агент» действительно не должен влиять на запрос. –
Используйте что-то вроде Firefox Live HTTP Headers и записывайте ответ на запрос Desktop в обоих случаях - правильные и неправильные пароли. Сравните это с запросом/ответом с вашего планшета. Возможно также, что целевой сайт перенаправляет запрос с вашего пользовательского агента приложения на мобильный сайт или сам сайт дает разные ответы на мобильный пользовательский агент вашего приложения. Попробовать пользовательский агент Desktop из приложения - еще одна идея. – parry