Java: Post-request 登录远程网站,在 login-button 上使用 javascript
Java: Post-request to login on remote website, which using javascript on login-button
我正在使用 Unirest 和 Java,试图登录远程网页。
我可以通过 Chrome 开发人员工具和 HTTP Trace 看到该网站正在使用 POST 和 header 中的 XMLHttpRequest:
POST [site]/Services/UserService.asmx/Authenticate
Origin: [site]
X-DevTools-Emulate-Network-Conditions-Client-Id: 86825bab-dcb4-4bef-885e-5350c11fe43b
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: application/json; charset=UTF-8
Accept: /
Referer: [site]
Accept-Encoding: gzip, deflate, br
Accept-Language: da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: ASP.NET_SessionId=xgea1elpr3dmrgbsotcghu5k; _ga=GA1.2.632065975.1472
如果我检查站点的源代码,我可以看到他们在提交按钮上使用 javascript.onClick()。
这是 javascript 部分的 code-snip 处理用户名和密码的部分(在 .onClick() 中):
...
var service = new Website.Services.UserService();
service.Authenticate(email, password, rememberMe, referrer,
function(result) {
if (!result.Authenticated) {
var message = result.Message || "Det var ikke muligt at logge ind med din e-mail og kode";
button.closest("fieldset").find(".error-text").text(message).show();
return;
} else {
// Redirect to my page
location.href = result.Url;
}
}, function() {
alert("Det var ikke muligt at få forbindelse til serveren, opdater siden og prøv igen");
}, true);
...
我的问题是,我可以 "simulate" 上面的 Java 脚本,使用 Unirest(或 Java 中的类似脚本)以便我可以登录页面吗?
如果是这样,怎么办?
或者有什么办法"by-pass"是?
我熟悉 Selenium 和 PhantomJS,它们可能可以解决它,但在这种情况下,这些方法无法使用。
我找到了解决方案 - 当然,这是一个非常简单实用的解决方案。
我必须在 Chrome 开发人员工具中对 "Preserve log" 设置一个勾号,执行覆盖实际 post 数据的重定向调用。在此之后,我可以看到 post 数据并可以使用 Unirest
复制它
我正在使用 Unirest 和 Java,试图登录远程网页。
我可以通过 Chrome 开发人员工具和 HTTP Trace 看到该网站正在使用 POST 和 header 中的 XMLHttpRequest:
POST [site]/Services/UserService.asmx/Authenticate
Origin: [site]
X-DevTools-Emulate-Network-Conditions-Client-Id: 86825bab-dcb4-4bef-885e-5350c11fe43b
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: application/json; charset=UTF-8
Accept: /
Referer: [site]
Accept-Encoding: gzip, deflate, br
Accept-Language: da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: ASP.NET_SessionId=xgea1elpr3dmrgbsotcghu5k; _ga=GA1.2.632065975.1472
如果我检查站点的源代码,我可以看到他们在提交按钮上使用 javascript.onClick()。 这是 javascript 部分的 code-snip 处理用户名和密码的部分(在 .onClick() 中):
...
var service = new Website.Services.UserService();
service.Authenticate(email, password, rememberMe, referrer,
function(result) {
if (!result.Authenticated) {
var message = result.Message || "Det var ikke muligt at logge ind med din e-mail og kode";
button.closest("fieldset").find(".error-text").text(message).show();
return;
} else {
// Redirect to my page
location.href = result.Url;
}
}, function() {
alert("Det var ikke muligt at få forbindelse til serveren, opdater siden og prøv igen");
}, true);
...
我的问题是,我可以 "simulate" 上面的 Java 脚本,使用 Unirest(或 Java 中的类似脚本)以便我可以登录页面吗?
如果是这样,怎么办?
或者有什么办法"by-pass"是?
我熟悉 Selenium 和 PhantomJS,它们可能可以解决它,但在这种情况下,这些方法无法使用。
我找到了解决方案 - 当然,这是一个非常简单实用的解决方案。
我必须在 Chrome 开发人员工具中对 "Preserve log" 设置一个勾号,执行覆盖实际 post 数据的重定向调用。在此之后,我可以看到 post 数据并可以使用 Unirest
复制它