如何使用android webview中的代码发送POST数据

时间:2011-09-28 16:38:30

标签: android http post login webview

我有一个由WebWiew组成的Android应用程序,我需要使用代码自动登录网站。我尝试过使用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 = "login_email=myEmail@gmail.com&login_password=myPassword";
        webview.postUrl("https://www.dropbox.com/login", EncodingUtils.getBytes(postData, "utf-8"));
    }
}

对于dropbox.com,这个很棒,但google.com,facebook.com等其他网站只是加载登录页面或给出错误(google.com提供错误说我需要启用cookie)。

现在我只是手工发布帖子数据;查看站点的登录表单,并在我的代码中将名称/值字段放在postData中。在谷歌等网站上,登录表单有很多隐藏字段,我也一直在将它们添加到postData中。

如果有人能让我知道我做错了什么,请让我知道,我对此非常困惑。

3 个答案:

答案 0 :(得分:15)

尝试用"utf-8"替换"BASE64"(在第二个参数中)。

答案 1 :(得分:11)

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"));
}

答案 2 :(得分:0)

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());