javascript - 尝试在android中使用jsoup提交表单

标签 javascript android jquery html jsoup

我正在尝试使用 jsoup 提交网站表单。问题是当我尝试在网络浏览器上提交表单时,会弹出一个警告框,提示您确定吗?这是它的快照

enter image description here

我尝试搜索所有内容以提交弹出窗口,但找不到任何内容。

这是到目前为止的代码

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

    }
}

这是我在网站上找到的警报框代码

enter image description here

我已经尝试了一切让它发挥作用,但我不知道我做错了什么。如果你能帮我解决这个问题,那将会非常有帮助。

这是最终状态

__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

最佳答案

试试这个

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

对上面代码的一些解释。

  1. 首先,您必须向登录页面 http://111.68.99.8/StudentProfile/ 发出请求才能生成一些 Cookie。实际登录需要这些 cookie loginForm.cookies()
  2. 该页面包含一些其他值,必须将这些值包含在第二个请求中才能使其正常工作。
  3. 您使用的是 Android,因此必须包含 userAgent,否则您将发送与移动设备相对应的数据,并且可能会被网站拒绝。
  4. 您的案件的确认不会对您产生影响。通过对所需的值进行硬编码,您可以完成这项工作,否则该工作将由在幕后运行的 javascript 完成。

一般来说,确保发送所需的所有数据的唯一方法是检查开发工具的网络选项卡并查看实际的请求 header

关于javascript - 尝试在android中使用jsoup提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34906400/

相关文章:

javascript - 使用 jQuery 将用户输入从 html 表转换为 JSON

javascript - 如何更改 src 中 ' + some +' 元素的值

javascript - PHP 页面上未加载 Highcharts

javascript - 解析大型 json 对象时出现 NODE.JS : FATAL ERROR- JS Allocation failed - process out of memory,

jquery - PhoneGap 应用程序无法在 Google Ripple 上运行

javascript - RegExp 用于验证网站 URL 不适用于数组

javascript - Handsontable:事件触发器上的setDataAtCell

java - Android Sign APK With Upload Certificate(如何确保指纹正确)

android - Koin 未找到类的定义,但已声明

Android Studio Logcat 搜索