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 中与实际浏览器不同的特定功能。