【问题标题】:DefaultHttpClient GET and POST commands Java AndroidDefaultHttpClient GET 和 POST 命令 Java Android
【发布时间】:2011-01-31 10:54:07
【问题描述】:

好的,这是我的应用程序:

一个 Android 应用程序,允许我通过移动应用程序而不是网站将 CokeZone 代码提交到 CokeZone.co.uk。

所以我写了这段代码来执行登录后命令,然后检查我是否在之后登录。

问题是 - 我发送 post 命令后从主页获得的 html 是默认的 - 好像我没有登录 - 所以出了点问题。

谁能帮忙!它可能是我将 POST 发送到的 URL,或者 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());
        }
    }

【问题讨论】:

    标签: java android http post httpwebrequest


    【解决方案1】:

    对登录请求的响应包含一个带有您登录会话的会话 ID 的 Cookie。您必须在后续请求中将其发回服务器,否则其他请求与您的登录无关。

    编辑:如果 HttpClient 实际上是在管理您的 cookie(检查 http://hc.apache.org/httpcomponents-client/tutorial/html/statemgmt.html),那么......也许登录在登录后将您重定向到其他地方,您需要遵循该重定向才能获取 cookie?这里有点猜测,但听起来你真的没有完成登录。

    【讨论】:

    • DefaultHttpClient 会为您处理所有这些事情。
    • "对登录请求的响应包含一个带有您登录会话的会话 ID 的 Cookie。您必须在后续请求中将其发回服务器,否则这些其他请求与您的登录。”你能告诉我如何实现这个任务吗,我真的需要将 session-id 传回服务器请帮助
    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2018-12-27
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多