web-dev-qa-db-ja.com

POSTデータをコードで送信する方法Android webview

Android WebWiewで構成されるアプリケーションがあり、コードを使用してサイトに自動的にログインする必要があります。postUrl()を使用してみました。動作する...しかし、いくつかのサイトでのみ。

これが私が使っているコードです:

public class webviewActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WebView webview = new WebView(this);
        setContentView(webview);
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);

        webview.setWebViewClient(new WebViewClient());

        String postData = "[email protected]&login_password=myPassword";
        webview.postUrl("https://www.dropbox.com/login", EncodingUtils.getBytes(postData, "utf-8"));
    }
}

これは機能しますgreat for dropbox.com、ただしgoogle.com、facebook.comなどの他のサイトは、ログインページをロードするか、エラーを表示します(google.comは、有効にする必要があるというエラーを表示しますクッキー)。

現在、私は手作業で投稿データを送信しています。サイトのログインフォームを確認し、コードのpostDataに名前/値フィールドを配置します。 Googleのようなサイトでは、ログインフォームに多くの非表示フィールドがあり、それらもpostDataに追加しています。

私が間違っていることについて誰かが私に何か考えを与えることができるなら、私に知らせてください、私はこれについてかなり混乱しています。

31

"utf-8"(2番目のパラメータ)を"BASE64"に置き換えてみてください。

15
an00b
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    WebView webView = new WebView(this);

    setContentView(webView);

    String url = "http://example.com/somepage.php";
    String postData = "postvar=value&postvar2=value2";

    webView.postUrl(url, EncodingUtils.getBytes(postData, "base64"));
}
11
Laxman
WebView myWebView = (WebView) findViewById(R.id.webview);

String url="http://www.example.org/login";

String postData=
                "username="+URLEncoder.encode("abc","UTF8")+
                "&password="+URLEncoder.encode("***", "UTF-8");

myWebView.postUrl(url,postData.getBytes());
0