jsoup 登录网站
jsoup to login to a webite
我正在尝试使用 jsoup 在登录“http://pawscas.usask.ca/cas-web/login”后获取信息。我已经尝试了下面的方法,但它似乎不起作用,任何帮助将不胜感激,谢谢。
Connection.Response res = null;
try {
res = Jsoup.connect("http://pawscas.usask.ca/cas-web/login")
.data("username", "user")
.data("password", "pass")
//.data("It", "some data")
//.data("execution", "some data")
//.data("_eventId", "submit")
.method(Method.POST)
.execute();
} catch (IOException e) {
e.printStackTrace();
}
//System.out.println(res.cookies());
//This will get you cookies
Map<String, String> loginCookies = res.cookies();
Document doc = null;
try {
doc = Jsoup.connect("https://paws5.usask.ca/web/home-community#mycourses")
.cookies(loginCookies)
.get();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(doc.toString());
试试这个哥们,基本上问题似乎是你随请求提供的数据不够,你需要包括所有输入字段。
其中两个输入是随机生成的数字,似乎与您的会话相关联(名称为 lt
和 execution
的那个),因此首先您需要获取它们,然后将其与您的数据一起传递。
Connection.Response initialResponse = null;
try {
// get "lt" and "execution" value
initialResponse = = Jsoup.connect("http://pawscas.usask.ca/cas-web/login").method(Method.GET).execute();
Document doc = initialResponse.parse();
// get lt
Element lt = doc.select("input[name=lt]").first();
String ltVal = lt.attr("value");
// get execution
Element execution = doc.select("input[name=execution]").first();
String executionVal = execution.attr("value");
// get cookies
Map<String, String> cookies = initialResponse.cookies();
// now do the login
res = Jsoup.connect("http://pawscas.usask.ca/cas-web/login")
.data("username", "user")
.data("password", "pass")
.data("lt", ltVal)
.data("execution", executionVal)
.data("_eventId", "submit")
.cookies(cookies)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36")
.method(Method.POST)
.execute();
} catch (IOException e) {
e.printStackTrace();
}
//System.out.println(res.cookies());
cookies.putAll(res.cookies());
Document doc = null;
try {
doc = Jsoup.connect("https://paws5.usask.ca/web/home-community#mycourses")
.cookies(cookies)
.get();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(doc.toString());
服务器可能正在检查该表单中的隐藏参数。如果不进一步了解您的错误代码或服务器正在做什么,就很难回答您的问题。您可以先尝试使用 jsoup 获取隐藏参数的值,然后 post 将它们传回服务器以查看是否有帮助,但如果没有,那么我不知道是什么:
<input type="hidden" name="lt" value="LT-3939609-Kw1VcYGxuNLKyEukchGOiWiBCzx0Mh" />
<input type="hidden" name="execution" value="e1s1" />
<input type="hidden" name="_eventId" value="submit" />
我正在尝试使用 jsoup 在登录“http://pawscas.usask.ca/cas-web/login”后获取信息。我已经尝试了下面的方法,但它似乎不起作用,任何帮助将不胜感激,谢谢。
Connection.Response res = null;
try {
res = Jsoup.connect("http://pawscas.usask.ca/cas-web/login")
.data("username", "user")
.data("password", "pass")
//.data("It", "some data")
//.data("execution", "some data")
//.data("_eventId", "submit")
.method(Method.POST)
.execute();
} catch (IOException e) {
e.printStackTrace();
}
//System.out.println(res.cookies());
//This will get you cookies
Map<String, String> loginCookies = res.cookies();
Document doc = null;
try {
doc = Jsoup.connect("https://paws5.usask.ca/web/home-community#mycourses")
.cookies(loginCookies)
.get();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(doc.toString());
试试这个哥们,基本上问题似乎是你随请求提供的数据不够,你需要包括所有输入字段。
其中两个输入是随机生成的数字,似乎与您的会话相关联(名称为 lt
和 execution
的那个),因此首先您需要获取它们,然后将其与您的数据一起传递。
Connection.Response initialResponse = null;
try {
// get "lt" and "execution" value
initialResponse = = Jsoup.connect("http://pawscas.usask.ca/cas-web/login").method(Method.GET).execute();
Document doc = initialResponse.parse();
// get lt
Element lt = doc.select("input[name=lt]").first();
String ltVal = lt.attr("value");
// get execution
Element execution = doc.select("input[name=execution]").first();
String executionVal = execution.attr("value");
// get cookies
Map<String, String> cookies = initialResponse.cookies();
// now do the login
res = Jsoup.connect("http://pawscas.usask.ca/cas-web/login")
.data("username", "user")
.data("password", "pass")
.data("lt", ltVal)
.data("execution", executionVal)
.data("_eventId", "submit")
.cookies(cookies)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36")
.method(Method.POST)
.execute();
} catch (IOException e) {
e.printStackTrace();
}
//System.out.println(res.cookies());
cookies.putAll(res.cookies());
Document doc = null;
try {
doc = Jsoup.connect("https://paws5.usask.ca/web/home-community#mycourses")
.cookies(cookies)
.get();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(doc.toString());
服务器可能正在检查该表单中的隐藏参数。如果不进一步了解您的错误代码或服务器正在做什么,就很难回答您的问题。您可以先尝试使用 jsoup 获取隐藏参数的值,然后 post 将它们传回服务器以查看是否有帮助,但如果没有,那么我不知道是什么:
<input type="hidden" name="lt" value="LT-3939609-Kw1VcYGxuNLKyEukchGOiWiBCzx0Mh" />
<input type="hidden" name="execution" value="e1s1" />
<input type="hidden" name="_eventId" value="submit" />