1

ログイン/パスを使用してPOSTリクエストを行い、インテントを使用してサイトを開きます。サイトは開いていますが、ログインしていません。何が問題になっていますか?

    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

問題は、アプリケーションで Web サイトにログインしていることです。そのため、すべての Cookie (ログインしているかどうかを示す) が応答として保存されます。

ブラウザーを開く新しいインテントを送信します。ただし、ブラウザーは、応答に保存されているこれらの Cookie にアクセスできません。そのため、Web サイトにアクセスしようとすると、Web サイトは 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 に答える