31

I have an android application that consists of a WebWiew and I need to login to a site automatically using code. I've tried using postUrl() and it seems to work... but only on some sites.

Here's the code I'm using:

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

This Works great for dropbox.com, but other sites like google.com, facebook.com, etc. just load the login page or give an error (google.com gives an error saying I need to enable cookies).

Right now I'm just going the post data by hand; looking at the login form for the site and putting the name/value fields in the postData in my code. On sites like google, the login form has many hidden fields and I've been adding those to the postData also.

If anyone could give me any idea of something I'm doing wrong please let me know, I'm pretty confused about this.

1
  • can we check this in Postman ??? if yes how to do so ?? Commented Apr 13, 2018 at 5:04

3 Answers 3

15

Try replacing "utf-8" (in the 2nd param) with "BASE64".

Sign up to request clarification or add additional context in comments.

3 Comments

Hi an00b. Thanks for the answer! I believe I have tried this with no luck. I'm no longer working on this specific problem, I decided to go a separate route. I'll vote you up anyway, because I really appreciate the answer.
"BASE64" is no character set, so this may work (depending on the postData) but it may as well fail. The correct way is to encode the postData to be "application/x-www-form-urlencoded" encoded, which can be done with URLEncoder.encode(postData, "UTF-8");
raudi can u put an answer with a snippet useing "application/x-www-form-urlencoded"
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 Comments

I read the source code of EncodingUtils.java in Android HERE EncodingUtils.getBytes(postData, "base64") as same as postData.getBytes(). Just use postData.getBytes() instead of EncodingUtils. (If you need migrate to Android M (API 23) with no EncodingUtils)
You saved my day dude.
2
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());

1 Comment

Where should we mention the "x-www-form-urlencoded" format?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.