HtmlUnit 和 HTTPS 页面
HtmlUnit and HTTPS pages
我正在尝试制作一个程序来检查可用职位并预订第一个可用职位。我开始写它,我 运行 很早就遇到了一个问题。
问题是,当我尝试连接网站(https)时,程序没有执行任何操作。它不会抛出错误,也不会崩溃。最奇怪的是,它适用于某些 https 网站,而某些则不适用。
我花了无数个小时试图解决这个问题。我尝试使用 htmlunitsdriver 但它仍然不起作用。请帮忙。
private final WebClient webc = new WebClient(BrowserVersion.CHROME);
webc.getCookieManager().setCookiesEnabled(true);
HtmlPage loginpage = webc.getPage(loginurl);
System.out.println(loginpage.getTitleText());
我对此感到非常沮丧。提前谢谢你。
如果没有您正在查询的 URL,很难说出哪里出了问题。然而,在一段时间前使用 HTML 单元后,我发现它在许多我需要从中获取数据的站点上都失败了。网站所有者会做很多事情来避免您使用程序访问它们,您可能不得不求助于使用一些较低级别的库,例如 Apache HTTP components,您可以在其中更好地控制引擎盖下发生的事情。
还要检查网站是否使用 JavaScript 构建,这种方法越来越流行,但使用程序查询内容越来越困难。
据我所知,这与 HttpS 无关。使用 Charles 或 Fiddler 进行一些流量分析是个好主意。
你能看到什么....
作为对您第一次调用 https://online.enel.pl/ 的响应从服务器返回的页面加载了一些外部 javascript。然后故事开始了:
这个JS长得像
(function() {
var z = "";
var b = "766172205f3078666.....";
eval((function() {
for (var i = 0; i < b.length; i += 2) {
z += String.fromCharCode(parseInt(b.substring(i, i + 2), 16));
}
return z;
})());
})();
如您所见,有人喜欢隐藏经过处理的真实 javascript。
下一步是检查这个简单解码后的javascript
真的很大,长这个样子
var _0xfbfd = ['\x77\x71\x30\x6b\x77 ....
(function (_0x2ea96d, _0x460da4) {
var _0x1da805 = function (_0x55e996) {
while (--_0x55e996) {
_0x2ea96d['\x70\x75\x73\x68'](_0x2ea96d['\x73\x68\x69\x66\x74']());
}
};
.....
好的,现在我们已经混淆了 javascript。如果您愿意,可以从 http://ddecode.com/hexdecoder/ 开始以获得一些更易读的文本,但这是我停止分析的步骤。看起来这个脚本做了一些非常糟糕的事情,或者有人仍然相信默默无闻的安全性。
如果您 运行 使用 HtmlUnit,此代码将被解释 - 是的,解码有效并且代码 运行s。遗憾的是,这段代码 运行 无穷无尽(可能是因为错误或与真实浏览器不兼容)。
如果你想让它正常工作,你必须找出错误所在,并为 HtmlUnit 打开错误报告。为此,您可以简单地从一个小的本地 HtmlFile 开始,并包含来自第一个外部 javascript 的代码。然后添加一些日志语句以获得解码版本。然后将其替换为解码版本并尝试了解发生了什么。您可以开始添加警报语句并检查 HtmlUnit 中的代码是否遵循与浏览器相同的路径。抱歉,我的时间有限,无法完成所有这些工作,但我真的很想 help/fix 如果你能指出 HtmlUnit 中与实际浏览器不同的特定功能。
我正在尝试制作一个程序来检查可用职位并预订第一个可用职位。我开始写它,我 运行 很早就遇到了一个问题。 问题是,当我尝试连接网站(https)时,程序没有执行任何操作。它不会抛出错误,也不会崩溃。最奇怪的是,它适用于某些 https 网站,而某些则不适用。 我花了无数个小时试图解决这个问题。我尝试使用 htmlunitsdriver 但它仍然不起作用。请帮忙。
private final WebClient webc = new WebClient(BrowserVersion.CHROME);
webc.getCookieManager().setCookiesEnabled(true);
HtmlPage loginpage = webc.getPage(loginurl);
System.out.println(loginpage.getTitleText());
我对此感到非常沮丧。提前谢谢你。
如果没有您正在查询的 URL,很难说出哪里出了问题。然而,在一段时间前使用 HTML 单元后,我发现它在许多我需要从中获取数据的站点上都失败了。网站所有者会做很多事情来避免您使用程序访问它们,您可能不得不求助于使用一些较低级别的库,例如 Apache HTTP components,您可以在其中更好地控制引擎盖下发生的事情。
还要检查网站是否使用 JavaScript 构建,这种方法越来越流行,但使用程序查询内容越来越困难。
据我所知,这与 HttpS 无关。使用 Charles 或 Fiddler 进行一些流量分析是个好主意。 你能看到什么....
作为对您第一次调用 https://online.enel.pl/ 的响应从服务器返回的页面加载了一些外部 javascript。然后故事开始了:
这个JS长得像
(function() {
var z = "";
var b = "766172205f3078666.....";
eval((function() {
for (var i = 0; i < b.length; i += 2) {
z += String.fromCharCode(parseInt(b.substring(i, i + 2), 16));
}
return z;
})());
})();
如您所见,有人喜欢隐藏经过处理的真实 javascript。
下一步是检查这个简单解码后的javascript
真的很大,长这个样子
var _0xfbfd = ['\x77\x71\x30\x6b\x77 ....
(function (_0x2ea96d, _0x460da4) {
var _0x1da805 = function (_0x55e996) {
while (--_0x55e996) {
_0x2ea96d['\x70\x75\x73\x68'](_0x2ea96d['\x73\x68\x69\x66\x74']());
}
};
.....
好的,现在我们已经混淆了 javascript。如果您愿意,可以从 http://ddecode.com/hexdecoder/ 开始以获得一些更易读的文本,但这是我停止分析的步骤。看起来这个脚本做了一些非常糟糕的事情,或者有人仍然相信默默无闻的安全性。
如果您 运行 使用 HtmlUnit,此代码将被解释 - 是的,解码有效并且代码 运行s。遗憾的是,这段代码 运行 无穷无尽(可能是因为错误或与真实浏览器不兼容)。
如果你想让它正常工作,你必须找出错误所在,并为 HtmlUnit 打开错误报告。为此,您可以简单地从一个小的本地 HtmlFile 开始,并包含来自第一个外部 javascript 的代码。然后添加一些日志语句以获得解码版本。然后将其替换为解码版本并尝试了解发生了什么。您可以开始添加警报语句并检查 HtmlUnit 中的代码是否遵循与浏览器相同的路径。抱歉,我的时间有限,无法完成所有这些工作,但我真的很想 help/fix 如果你能指出 HtmlUnit 中与实际浏览器不同的特定功能。