1

我正在使用登录/通过发出 POST 请求并使用 Intent 打开站点。该站点正在打开,但未登录。出了什么问题?

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://mysite.co/login.php");

    try {

        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("pass", "mypass"));
        nameValuePairs.add(new BasicNameValuePair("user", "myuser"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }

    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://mysite.com"));
    startActivity(browserIntent);
4

2 回答 2

2

如果您期望打开浏览器时会登录,IMO 这是不可能的。

这是因为httpclient登录请求不会在您的应用程序和浏览器应用程序之间共享,因此无法传递您在登录时收到的 cookie。

于 2012-10-19T17:36:41.773 回答
1

问题是您正在登录应用程序中的网站。因此,所有 cookie(显示您是否已登录)都会存储在响应中。

您发送新的意图,打开浏览器。但是,浏览器无权访问保存在您的回复中的这些 cookie。因此,当它尝试访问网站时,该网站没有获得 cookie,并认为您没有记录它。

我会说你应该删除这段代码的整个第一部分,只剩下这样的东西:

 Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://mysite.com/login.php?user=myuser&pass=mypass"));
    startActivity(browserIntent);

这样,浏览器将发送身份验证信息并接收 cookie 作为响应,并将其用于任何后续通信。

于 2012-10-19T17:38:32.883 回答