Ebad Ali
Ebad Ali

Reputation: 600

Trying to submit a form using jsoup in android

I am trying to submit a form of a website using jsoup. The problem is when I try to submit the form on web browser, an alert box pops up saying are you sure? Here is the snap of it

enter image description here

I tried to search everything to submit popup but couldn't find anything.

here is the code so far

package com.example.ebad.apppw;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.util.HashMap;

public class course_registration_post extends Activity {

    String url = "http://111.68.99.8/StudentProfile/RegisterCourse.aspx";
    HashMap<String, String> hashMaps;

    Button button;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.temp);

        hashMaps = Data.map;

        button  = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new course_post().execute();

            }
        });


    }


    private class course_post extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            try
            {

                Connection.Response loginForm = Jsoup.connect(url).method(Connection.Method.GET).timeout(4000).execute();
                Document document = loginForm.parse();


                String viewstate2 = document.select("input[name=__VIEWSTATE]").attr("value");
                String stategenerator2 = document.select("input[name=__VIEWSTATEGENERATOR]").attr("value");
                String Eventvalidation2 = document.select("input[name=__EVENTVALIDATION]").attr("value");

                Document doc = Jsoup.connect(url)
                        .cookies(hashMaps)
                        .data("__EVENTTARGET", "")
                        .data("__EVENTARGUMENT", "")
                        .data("__VIEWSTATE", viewstate2)
                        .data("__VIEWSTATEGENERATOR", stategenerator2)
                        .data("__VIEWSTATEENCRYPTED","")
                        .data("__EVENTVALIDATION", Eventvalidation2)
                        .data("ctl00$Body$COURSES_OFFERED$ctl06$cbox","on")
                        .data("ctl00$Body$RegisterButton", "Register Selected Courses")
                        .post();

  /*              JSContext context = new JSContext();
                String script =
                        "function factorial(x) { var f = 1; for(; x > 1; x--) f *= x; return f; }\n" +
                                "var fact_a = factorial(a);\n";
                context.evaluateScript(script);
*/
                String s = doc.select("span[id=ctl00_MessageLabel]").text();

                System.out.println(doc);


                System.out.println(viewstate2);
                System.out.println(stategenerator2);
                System.out.println(Eventvalidation2);
                System.out.println(s);


            }catch (Exception e)
            {
                e.printStackTrace();}


            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
        }

    }
}

Here is the code of alert box I found on webiste

enter image description here

I have tried everything to make it work but I don't know what I am doing wrong. It would be really helpful if you guy help me solve this problem.

Here is the final state

__EVENTTARGET:
__EVENTARGUMENT:
__VIEWSTATE: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
__VIEWSTATEGENERATOR:1DA4211B
__VIEWSTATEENCRYPTED:
__EVENTVALIDATION:pVf4rtzUJV4wgdQx/akYk0gxfIjNV+uFZAXDbdglqD/e0WVKNzmOUJrcnI5ociekKl8I5T/ZeU8rhR6Slwemijo0RNWkupRo9ivsh0RC3WejftUnjRNbdBlqkS9g/jislasihd9ZJyKZLDmv0/chcscVIkgzGH/hW3cyHKZq83KkzdScHM5UWl7h87zcx7IA5DotWkh2vjEcMb6GjRUnl5R0I4ApoRUF4grYDM6lQOESzEMpW1FfS5n1aHzb49K69tesaRDRDrP0vSvpT7Hj/j40B+ectL0jpEUaiX8+fs88TKCzjGgqle/HYZudVz/Xle5nE5HZ+eX5tJE9RZYIjeZiwd/tThAJjRX/m2SE3Glql1uAIwpkb2zamffYRTZ5umLeHJk31ilK35x9D6nc9fdoatupTrHaPdUTbf4j+tnTpcTao1DEW9l536TQ9dZRDb6cMK6t7Kd5XTz8WX2UbfIvgnAIeqVod2XZqBKAHHDJoEyvDPQqLsOZ4Dh/14Jd
ctl00$Body$RegisterButton:Register Selected Courses

enter image description here

enter image description here

Upvotes: 2

Views: 1133

Answers (2)

Alkis Kalogeris
Alkis Kalogeris

Reputation: 17765

Try this

Connection.Response loginForm = Jsoup
        .connect("http://111.68.99.8/StudentProfile/")
        .method(Connection.Method.GET)
        .userAgent(
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.0 Safari/537.36")
        .execute();

Document loginDoc = loginForm.parse();
String viewstate2 = loginDoc.select("input[name=__VIEWSTATE]").attr(
        "value");
String stategenerator2 = loginDoc.select(
        "input[name=__VIEWSTATEGENERATOR]").attr("value");
String Eventvalidation2 = loginDoc.select(
        "input[name=__EVENTVALIDATION]").attr("value");

Document document = Jsoup
        ..userAgent(
                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.0 Safari/537.36")
        .connect("http://111.68.99.8/StudentProfile/RegisterCourse.aspx")
        .data("__EVENTTARGET", "").data("__EVENTARGUMENT", "")
        .data("__VIEWSTATE", viewstate2)
        .data("__VIEWSTATEGENERATOR", stategenerator2)
        .data("__VIEWSTATEENCRYPTED", "")
        .data("__EVENTVALIDATION", Eventvalidation2)
        .data("ctl00$Body$COURSES_OFFERED$ctl06$cbox", "on")
        .data("ctl00$Body$RegisterButton", "Register Selected Courses")
        .data("USERNAME_KEY", "USERNAME_VALUE")
        .data("PASSWORD_KEY", "PASSWORD_VALUE")
        .cookies(loginForm.cookies()).post();

Some explanation for the code above.

  1. First you must make a request to the login page http://111.68.99.8/StudentProfile/ in order to generate some cookies. These cookies loginForm.cookies(), are needed for the actual login.
  2. The page includes some other values that must be included in the second request to make it work.
  3. You are using android, so you must include the userAgent otherwise you are going to send data that correspond to a mobile device and that may be rejected by the site.
  4. The confirmation in your case doesn't affect you. By hard coding the values that are needed you do the job, that otherwise would have been done by the javascript running behind the scenes.

In general, the only way to be sure that you are sending all the data that are needed is to check the Network tab of development tools and see the actual Request headers.

Upvotes: 4

Vaibhav Sharma
Vaibhav Sharma

Reputation: 2319

Jsoup cannot handle javascript. Selenium, htmlunit is what you are looking for. You can enable javascript in htmlunit webclient and it will help you getting the click as the htmlunit's webclient mimics all the behaviours of a web browser.

Upvotes: 0

Related Questions