DefaultHttpClient GET и POST команды Java Android - PullRequest
2 голосов
/ 24 марта 2010

Хорошо, это мое приложение:

Android-приложение, позволяющее отправлять коды CokeZone в CokeZone.co.uk из мобильного приложения, а не с веб-сайта.

Итак, я написал этот раздел кода для выполнения команды post logon, а затем проверил, вошел ли я в систему после.

Проблема в том, что HTML-код, который я получаю с домашней страницы после отправки команды post, используется по умолчанию (как будто я не вошел в систему), поэтому что-то идет не так.

Может кто-нибудь, пожалуйста, помогите! Вероятно, это URL, на который я отправляю POST, или параметры в команде POST - я не делал большую часть этого материала, так что это, вероятно, что-то очевидное.

Ниже приведен мой код:

 DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httpget = new HttpGet(url);

    HttpResponse response = httpclient.execute(httpget);
    HttpEntity entity = response.getEntity();
    thisResponse = printPage(entity.getContent());
    Log.e("debug",thisResponse);
    System.out.println("Login form get: " + response.getStatusLine());
    if (entity != null) {
        entity.consumeContent();
    }
    System.out.println("Initial set of cookies:");
    List<Cookie> cookies = httpclient.getCookieStore().getCookies();
    if (cookies.isEmpty()) {
        System.out.println("None");
    } else {
        for (int i = 0; i < cookies.size(); i++) {
            System.out.println("- " + cookies.get(i).toString());
        }
    }

    HttpPost httpost = new HttpPost("https://secure.cokezone.co.uk/home/blank.jsp?_DARGS=/home/login/login.jsp");

    List <NameValuePair> nvps = new ArrayList <NameValuePair>();
    nvps.add(new BasicNameValuePair("_dyncharset", "ISO-8859-1"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.loginFormBean.name","renegadeandy%40gmail.com"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.loginFormBean.name", "+"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.cookiedUser", "false"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.cookiedUser", "+"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.loginFormBean.password", "passwordval"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.loginFormBean.password", "+"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.rememberMe", "yes"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.rememberMe", "false"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.aSuccessURL", "http://www.cokezone.co.uk/home/index.jsp"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.aSuccessURL", "+"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.aErrorURL", "http://www.cokezone.co.uk/home/index.jsphttps://secure.cokezone.co.uk/home/index.jsp"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.aErrorURL", "+"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.explicitLogin", "true"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.explicitLogin", "+"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.fICLogin", "login"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.fICLogin", "+"));
    nvps.add(new BasicNameValuePair("/grlp/login/LoginHandler.fICLogin", "LOGIN"));
    nvps.add(new BasicNameValuePair("_D:/grlp/login/LoginHandler.fICLogin", "+"));
    nvps.add(new BasicNameValuePair("_DARGS", "/home/login/login.jsp"));

    httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

    response = httpclient.execute(httpost);
    entity = response.getEntity();

    System.out.println("Login form get: " + response.getStatusLine());
    if (entity != null) {
      thisResponse = printPage(entity.getContent());
      entity.consumeContent();
    }

    Log.e("debug",thisResponse);
    Log.e("debug","done");

    httpget = new HttpGet("http://www.cokezone.co.uk/home/index.jsp");

    response = httpclient.execute(httpget);
    entity = response.getEntity();

  TextView points = (TextView)findViewById(R.id.points);
  points.setText(getPoints(entity.getContent()).toString());
  debug.setText(thisResponse);
    System.out.println("Post logon cookies:");
    cookies = httpclient.getCookieStore().getCookies();
    if (cookies.isEmpty()) {
        System.out.println("None");
    } else {
        for (int i = 0; i < cookies.size(); i++) {
            System.out.println("- " + cookies.get(i).toString());
        }
    }

1 Ответ

3 голосов
/ 25 марта 2010

Ответ на запрос входа в систему содержит Cookie с идентификатором сеанса для вашего сеанса входа в систему. Вы должны отправить это обратно на сервер в последующих запросах, иначе эти другие запросы не связаны с вашим входом в систему.

РЕДАКТИРОВАТЬ: Если HttpClient фактически управляет вашими файлами cookie (проверьте против http://hc.apache.org/httpcomponents-client/tutorial/html/statemgmt.html), тогда ... возможно, имя входа перенаправляет вас куда-то еще после входа в систему, и вам нужно выполнить это перенаправление, чтобы получить файлы cookie? угадать здесь, но это действительно звучит так, как будто вы не завершили вход в систему.

...