gpt4 book ai didi

java - 通过 Jsoup post 方法登录网站不起作用

转载 作者:行者123 更新时间:2023-12-02 04:29:36 25 4
gpt4 key购买 nike

我有以下代码,用于以编程方式登录网站。但是,它不会返回登录页面的 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 <String,String> cookies = res.cookies();

Document loggedIn = Jsoup.connect(userDataUrl)
.cookies(cookies)
.get();

System.out.print(loggedIn);

}
}

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

 <input type="submit" class="saveButton" value="Login">

但是这个没有“name”属性,所以我没有发布它

欢迎任何答案/评论!

[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 cookie
第 2 阶段 -
您使用您的用户名和密码发送 post 请求,并添加您在第 1 阶段获得的 cookie
其代码是 -

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 cookie,因此这是来自服务器的无效请求。

关于java - 通过 Jsoup post 方法登录网站不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31640844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com