使用 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 Headers
和 Form Data
。检查所有这些值是否相同。这将帮助您硬编码一些您缺少的值.
我不得不使用
String EVENTVARGUMENTvalue = doc.select("input[name=__EVENTARGUMENT").attr("value");
我正在尝试使用 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 Headers
和 Form Data
。检查所有这些值是否相同。这将帮助您硬编码一些您缺少的值.
我不得不使用
String EVENTVARGUMENTvalue = doc.select("input[name=__EVENTARGUMENT").attr("value");