HtmlUnit和HTTPS页面

时间:2018-11-27 07:19:55

标签: java htmlunit htmlunit-driver

我正在尝试编写一个程序来检查可用职位并预定第一个可用职位。我开始写它,很早就遇到了问题。 问题是,当我尝试连接该站点(即https)时,该程序没有执行任何操作。它不会引发错误,也不会崩溃。最奇怪的是,它可与某些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());

对此我感到非常沮丧。预先谢谢你。

2 个答案:

答案 0 :(得分:2)

据我所见,这与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中的某个功能而不是真正的浏览器,我真的很想帮助/解决这个问题。

答案 1 :(得分:0)

没有您要查询的URL,很难说出什么地方是错误的。但是,前一段时间使用HTML单元时,我发现我需要从中获取数据的许多站点都失败了。网站所有者会做很多事情来避免您使用程序来访问它们,并且您可能不得不诉诸使用诸如Apache HTTP components之类的底层库,在这里您可以更好地控制内幕。

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