使用 Jsoup 登录网站时遇到问题,

Having trouble loggin into website with Jsoup,

我正在尝试使用 jsoup 登录一个网站,我很确定我正在解析我需要的所有内容,但我就是不知道哪里出了问题。

我正在使用这个作为参考:http://cs.harding.edu/fmccown/android/Logging-into-Pipeline.pdf

这是我的 AsycnTask doInBackground 中的代码:

            Connection.Response loginForm = Jsoup.connect(url)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .method(Connection.Method.GET)
                    .timeout(10000)
                    .execute();

            Document doc = loginForm.parse();

            //Random values you need to parse to lectio
            String VIEWSTATEXvalue = doc.select("input[name=__VIEWSTATEX").attr("value");
            String EVENTVALIDATIONvalue = doc.select("input[name=__EVENTVALIDATION").attr("value");

            Log.v("MainActivity",VIEWSTATEXvalue + EVENTVALIDATIONvalue);



            doc = Jsoup.connect(url)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .data("m$Content$username2", username)
                    .data("m$Content$password2", password)
                    .data("__VIEWSTATEX",VIEWSTATEXvalue)
                    .data("__EVENTVALIDATION",EVENTVALIDATIONvalue)
                    .data("__EVENTTARGET","m$Content$submitbtn2")

                    .cookies(loginForm.cookies())
                    .post();
            Log.v("MainActivity", doc.toString());

但问题是它不包含我登录时页面的文档,它包含错误页面的文档,只是说 "something went wrong".

我猜这是因为我没有解析所有参数。

这是我要登录的页面:https://www.lectio.dk/lectio/11/login.aspx?lecafdeling=4733693054

在查看了一些提交的表格后,我可以找到以下内容:

//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    theForm.__EVENTTARGET.value = eventTarget;
    theForm.__EVENTARGUMENT.value = eventArgument;
    theForm.submit();
}
}
//]]>

但我不知道如何解析这些的正确值

查看浏览器发送的内容的更简单方法是检查原始 http 请求并复制 headers。您可以通过按 F12 打开开发工具来使用 Chrome 执行此操作。 SelectNetwork。左上角有一颗子弹。悬停它,它会显示 Record Network Log。这必须是红色的。如果没有按下它。这将记录您将发送的请求的所有流量。您将在下面的 table 上找到许多行。按 Method 和 select 值 POST 的行排序(按列 Name 的值。这是您发送的实际请求。在面板上正确 select Headers。检查 Request HeadersForm Data。检查所有这些值是否相同。这将帮助您硬编码一些您缺少的值.

我不得不使用

String EVENTVARGUMENTvalue = doc.select("input[name=__EVENTARGUMENT").attr("value");