HtmlUnit and HTTPS pages



我正在尝试制作一个程序,检查可用位置并预订第一个可用位置。我开始写它,很早就遇到了问题。问题是,当我尝试连接该网站(即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());

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

据我所见,这与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 = ['x77x71x30x6bx77 ....
(function (_0x2ea96d, _0x460da4) {
var _0x1da805 = function (_0x55e996) {
while (--_0x55e996) {
_0x2ea96d['x70x75x73x68'](_0x2ea96d['x73x68x69x66x74']());
}
};
.....

好的,现在我们已经混淆了javascript。如果你喜欢,可以从http://ddecode.com/hexdecoder/为了得到一些可读性更强的文本,但这是我停止分析的步骤。看起来这个脚本做了一些非常糟糕的事情,或者有人仍然默默无闻地相信安全性。

如果你用HtmlUnit运行这个,这个代码就会被解释——是的,解码会起作用,代码也会运行。遗憾的是,这段代码没完没了地运行(可能是因为一个错误或与实际浏览器不兼容(。

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

如果没有您正在查询的URL,很难说出可能出了什么问题。然而,在一段时间前使用HTML单元后,我发现它在许多需要获取数据的网站上都失败了。网站所有者会做很多事情来避免你使用程序访问它们,你可能不得不使用一些较低级别的库,比如Apache HTTP组件,在那里你可以更好地控制引擎盖下发生的事情。

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

相关内容

  • 没有找到相关文章

最新更新