2010-03-24 2 views
2

Ok это мое приложение:DefaultHttpClient GET и POST команд Java Android

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

Итак, я написал этот раздел кода, чтобы выполнить команду после входа в систему, а затем проверить, не вошел ли я после входа.

Проблема - это 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()); 
     } 
    } 

ответ

3

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

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

+1

DefaultHttpClient заботится обо всех этих вещах для вас. – RenegadeAndy

+0

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

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