【问题标题】:HtmlUnit and HTTPS pagesHtmlUnit 和 HTTPS 页面
【发布时间】:2018-11-27 07:19:55
【问题描述】:

我正在尝试制作一个程序来检查可用职位并预订第一个可用职位。我开始写它,我很早就遇到了问题。 问题是当我尝试连接该站点(即 https)时,该程序不执行任何操作。它不会抛出错误,也不会崩溃。最奇怪的是它适用于一些 https 网站,而有些则不能。 我花了无数个小时试图解决这个问题。我尝试使用 htmlunitdriver,但它仍然无法正常工作。请帮忙。

private final WebClient webc = new WebClient(BrowserVersion.CHROME);
webc.getCookieManager().setCookiesEnabled(true);
HtmlPage loginpage = webc.getPage(loginurl);        
System.out.println(loginpage.getTitleText());

我对此感到非常沮丧。提前谢谢你。

【问题讨论】:

  • 您是否有能够重现您的问题的示例网址。您使用最新的 HtmlUnit 版本吗?
  • 是的,我使用的是最新版本。无效的网址是online.enel.pl,有效的网址是backpack.tf

标签: java htmlunit htmlunit-driver


【解决方案1】:

据我所知,这与 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 运行此代码,则此代码会被解释 - 是的,解码有效并且代码运行。遗憾的是,这段代码无休止地运行(可能是因为错误或与实际浏览器不兼容)。

如果你想让它工作,你必须弄清楚错误在哪里,并打开 HtmlUnit 的错误报告。为此,您可以简单地从一个小的本地 HtmlFile 开始,并包含来自第一个外部 javascript 的代码。然后添加一些日志语句来获取解码后的版本。然后将其替换为解码版本并尝试了解发生了什么。您可以开始添加警报语句并检查 HtmlUnit 中的代码是否遵循与浏览器相同的路径。抱歉,我的时间仅限于完成所有这些工作,但如果您可以指向 HtmlUnit 中与实际浏览器不同的特定函数,我真的很乐意提供帮助/修复。

【讨论】:

    【解决方案2】:

    如果没有您要查询的 URL,就很难说出可能出了什么问题。但是,在使用 HTML 单元一段时间后,我发现它在许多需要从中获取数据的站点上都失败了。网站所有者会做很多事情来避免您使用程序来访问它们,您可能不得不求助于一些较低级别的库,例如 Apache HTTP components,您可以更好地控制幕后发生的事情。

    还要检查网站是否使用越来越流行的 JavaScript 构建,但使用程序来查询内容变得越来越困难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多