簡體   English   中英

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

但是問題在於,當我登錄時它不包含頁面的文檔,而是包含錯誤頁面的文檔,該頁面僅顯示“出了點問題”。

我猜這是因為我沒有解析所有參數。

這是我要登錄的頁面: 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請求,然后僅復制標頭。 您可以通過按F12打開“開發工具”來使用Chrome來執行此操作。 選擇Network 左上方有一個項目符號。 懸停它,它將顯示Record Network Log 必須是紅色的。 如果不是,請按。 這將記錄您將發送的請求的所有流量。 您將在下表中找到許多行。 按“ Method排序,然后選擇值為POST的行(按“ Name ”列的值。這是您要發送的實際請求。在右側面板上選擇“ Headers 。檢查“ Request HeadersForm Data 。檢查是否全部這些值是相同的,這將有助於您對一些缺失的值進行硬編碼。

我不得不用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM