Black Magic
Black Magic

Reputation: 2766

Logging in to website programmatically Android

I am creating an app which needs to login to a website programmatically. I tried to use this code, but it doesn't log me in.

@Override
    protected Boolean doInBackground(Void... arg0) {
        try {
            Connection.Response res = Jsoup.connect("http://omegastrike.co.uk/member.php?action=login")
                    .data("username", username, "password", password)
                    .followRedirects(true)
                    .method(Method.POST)
                    .execute();
            
            Map<String, String> cookies = res.cookies();

            Document doc2 = Jsoup.connect("http://omegastrike.co.uk/index.php")
                    .cookies(cookies)
                    .get();
            

            System.out.println(doc2);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

Bonus question: How do I use this logged in connection for other functionalities in the app? Do I need to keep logging in?

Upvotes: 0

Views: 1036

Answers (3)

David S.
David S.

Reputation: 6705

So when you look at the login form for this page, the raw HTML looks like this:

    <form method="post" action="member.php">
        <table border="0" width="100%">
            <tr>
                <td>
                    <label for="login_username">Username:</label>
                </td>
                <td>
                    <input type="text" value="" style="width: 95%;" maxlength="30" size="25" name="username" class="textbox" id="login_username" />
                </td>
            </tr>
            <tr>
                <td>
                    <label for="login_password">Password:</label>
                </td>
                <td>
                    <input type="password" value="" style="width: 95%;" size="25" name="password" class="textbox" id="login_password" />
                </td>
            </tr>
            <tr>
                <td>
                    <label class="smalltext" title="If ticked, your login details will be remembered on this computer, otherwise, you will be logged out as soon as you close your browser."><input type="checkbox" value="yes" checked="checked" name="remember" class="checkbox"> Remember Me</label>
                </td>
                <td style="text-align: right;">
                    <input type="submit" value="Login" name="submit" id="button_postbit" />
                </td>
            </tr>
        </table>
        <input type="hidden" value="do_login" name="action" />
        <input type="hidden" value="" name="url" />
    </form>

As you can see, this is a POST, to the URL http://omegastrike.co.uk/member.php. There are several fields being submitted, not just username and password. The fields are:

    [username] => namehere 
    [password] => passhere 
    [remember] => yes 
    [submit] => Login 
    [action] => do_login

So you need to include all of those in your POST request.

It would look something like this:

    Connection.Response res = Jsoup.connect("http://omegastrike.co.uk/member.php")
                .data("username", username, "password", password, "submit", "Login", "action", "do_login")
                .followRedirects(true)
                .method(Method.POST)
                .execute();

As to staying logged in, I don't have an account with which to test, but generally there is a session id header or a cookie set upon login, that if included with subsequent requests, will keep you logged in.

Upvotes: 1

Kov&#225;cs Imre
Kov&#225;cs Imre

Reputation: 715

You can use Apache HTTP Components. HttpPost will do the job for you. Make sure you spoof the User-Agent, because some servers are set to accept only certain browsers. Also using Wireshark as a sniffer is highly recommended.

Upvotes: 0

Mario
Mario

Reputation: 173

use

...

    Jsoup.connect("http://omegastrike.co.uk/member.php")
                        .data("username", username, "password", password, "submit", "Login", "action", "do_login")  

...

Upvotes: 1

Related Questions