通过Jsoup post方法登录网站无效

我有以下代码用于以编程方式登录网站。 但是,它不返回登录页面的html(带有用户数据信息),而是返回登录页面的html。 我试图多次发现出了什么问题,但我似乎无法找到它。

public class LauncherClass { static String username = "----username here------"; //blocked out here for obvious reasons static String password = "----password here------"; static String loginUrl = "https://parents.mtsd.k12.nj.us/genesis/parents/j_security_check"; static String userDataUrl = "https://parents.mtsd.k12.nj.us/genesis/parents?module=gradebook"; public static void main(String[] args) throws IOException{ LauncherClass launcher = new LauncherClass(); launcher.Login(loginUrl, username, password); } public void Login(String url, String username, String password) throws IOException { Connection.Response res = Jsoup .connect(url) .data("j_username",username,"j_password",password) .followRedirects(true) .ignoreHttpErrors(true) .method(Method.POST) .userAgent("Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.4 Safari/537.36") .timeout(500) .execute(); Map  cookies = res.cookies(); Document loggedIn = Jsoup.connect(userDataUrl) .cookies(cookies) .get(); System.out.print(loggedIn); } } 

[注意]登录表单确实有一行:

   

但这没有“名称”属性,所以我没有发布它

任何答案/评论表示赞赏!

[UPDATE2]对于登录页面,浏览器显示以下内容……

  ---General Remote Address:107.0.42.212:443 Request URL:https://parents.mtsd.k12.nj.us/genesis/j_security_check Request Method:POST Status Code:302 Found ----Response Headers view source Content-Length:0 Date:Sun, 26 Jul 2015 20:06:15 GMT Location:https://parents.mtsd.k12.nj.us/genesis/parents?gohome=true Server:Apache-Coyote/1.1 ----Request Headers view source Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding:gzip, deflate Accept-Language:en-US,en;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Content-Length:51 Content-Type:application/x-www-form-urlencoded Cookie:JSESSIONID=33C445158EB6CCAFFF77D2873FD66BC0; lastvisit=458D80553DC34ADD8DB232B5A8FC99CA Host:parents.mtsd.k12.nj.us HTTPS:1 Origin:https://parents.mtsd.k12.nj.us Referer:https://parents.mtsd.k12.nj.us/genesis/parents?gohome=true User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.4 Safari/537.36 ----Form Data j_username: ---username here--- j_password: ---password here--- 

您必须分两个阶段登录该站点。
第1阶段 – 您向此URL发送GET请求 – https://parents.mtsd.k12.nj.us/genesis/parents?gohome=true ,您将获得session cookies
第2阶段 –
您使用您的用户名和密码发送post请求,并添加您在第1阶段获得的cookies
代码是 –

 Connection.Response res = null; Document doc = null; try { //first connection with GET request res = Jsoup.connect("https://parents.mtsd.k12.nj.us/genesis/parents?gohome=true") // .userAgent(YourUserAgent) // .header("Accept", WhateverTheSiteSends) // .timeout(Utilities.timeout) .method(Method.GET) .execute(); } catch (Exception ex) { //Do some exception handling here } try { doc = Jsoup.connect("https://parents.mtsd.k12.nj.us/genesis/parents/j_security_check"") // .userAgent(YourUserAgent) // .referrer(Referer) // .header("Content-Type", ...) .cookies(res.cookies()) .data("j_username",username) .data("j_password",password) .post(); } catch (Exception ex) { //Do some exception handling here } //Now you can use doc! 

您可能必须为两个请求添加不同的HEADERS例如userAgentreferrercontent-type等。 在第二个请求结束时, doc应该具有该站点的HTML

您无法登录该站点的原因是您发送的post请求没有session cookies ,因此这是来自服务器的无效请求。