Android HttpClient POST Форма Войти - PullRequest
1 голос
/ 23 января 2011

после прочтения пары ресурсов для создания конструкции HttpClient для входа в систему через форму, доступную на веб-сайте (метод POST), я написал этот метод:

public void connect(View v) {
    final String TAG = ">>>>>>>>>>>> Activity Log: ";
    request = new HttpGet("http://www.mysite.com/login");
    try {
        response = client.execute(request);
    } catch (ClientProtocolException e3) {
        e3.printStackTrace();
    } catch (IOException e3) {
        e3.printStackTrace();
    }

    entity = response.getEntity();
    Log.d(TAG, "Login form get: " + response.getStatusLine());
    if(entity != null) {
        try {
            entity.consumeContent();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    Log.d(TAG, "Initial set of cookies:");

    cookies = client.getCookieStore().getCookies();
    if (cookies.isEmpty())
    {
        Log.d(TAG, "None");
    }
    else
    {
        for(int i = 0; i<cookies.size(); i++)
        {
            Log.d(TAG, "- " + cookies.get(i));
        }
    }
    String action = "/login.php";
    String yourServer = "http://www.mysite.com";
    post = new HttpPost(yourServer + action);

    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("username", "myuser"));
    params.add(new BasicNameValuePair("password", "mypass"));

    try {
        post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
    } catch (UnsupportedEncodingException e2) {
        e2.printStackTrace();
    }


    try {
        response = client.execute(post);
    } catch (ClientProtocolException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
    entity = response.getEntity();

    Log.d(TAG, "Login form get: " + response.getStatusLine());
    if(entity != null){
        try {
            entity.consumeContent();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    Log.d(TAG, "Post logon cookies:");
    cookies = client.getCookieStore().getCookies();
    if (cookies.isEmpty())
    {
        Log.d(TAG, "None");
    } 
    else
    {
        for (int i = 0; i < cookies.size(); i++) {
            Log.d(TAG, "- " + cookies.get(i));
        }
    }
}

Но независимо от того, Я поставил как имя пользователя / пароль, я получаю Статус: "ОК 200" . И как cookie я получаю что-то вроде этого:

[версия: 0] [имя: PHPSESSID] [значение: 9ismhf3p5c282p1east0drme02] [домен: .mysite.com] [путь: /] [срок действия: нуль]

Когда я пытаюсь получить доступ к некоторому URL, который недоступен для не авторизованных пользователей, я получаю страницу формы входа. Как узнать, что я успешно вошел в систему и получил доступ к недоступным URL?

1 Ответ

2 голосов
/ 25 марта 2011

Эй, У меня такая же проблема. Вы получаете статус: «OK 200», потому что сообщение считается успешным, независимо от результата входа в систему. Мое решение заключалось в проверке объекта ответа. По сути, это строка, содержащая источник страницы, на которую пользователь отправит ваше сообщение, если оно будет сделано в браузере. Внутри этого будет заголовок страницы. Например: Ошибка входа. Хотя не всегда так удачно названы, как это, вы можете легко найти заголовки как успешной страницы входа, так и неудачной страницы входа, просто войдя в систему вручную и затем используя view -> source page.

Итак, решение будет содержать что-то вроде этого:

final String responseText =  EntityUtils.toString(response.getEntity());
if (responseText.contains("<title>Login Failed<title>")
{
You failed
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...