无法使用Jsoup登录网站,

时间:2015-01-14 15:09:41

标签: java android 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());

但问题是当我登录时它不包含页面文档,它包含一个错误页面的文档,只是说“出了问题”。

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

这是我尝试登录的页面: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();
}
}
//]]>

但我不知道如何解析这些

的正确值

2 个答案:

答案 0 :(得分:1)

查看浏览器发送内容的更简单方法是检查原始http请求并只复制标头。您可以通过按F12打开开发工具来使用Chrome执行此操作。选择Network。左上方有一颗子弹。将其悬停并显示Record Network Log。这必须是红色的。如果没有按下它。这将记录您将发送的请求的所有流量。您将在下表中列出多行。按Method排序并选择值为POST的行(按列Name的值。这是您要发送的实际请求。在右边的面板上选择{{ 1}}。检查HeadersRequest Headers。检查所有这些值是否相同。这有助于您对某些缺少的值进行硬编码。

答案 1 :(得分:0)

我必须使用

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