HtmlUnit и HTTPS страницы - PullRequest
       42

HtmlUnit и HTTPS страницы

0 голосов
/ 27 ноября 2018

Я пытаюсь создать программу, которая проверяет имеющиеся позиции и регистрирует первую доступную.Я начал писать и столкнулся с проблемой довольно рано.Проблема в том, что когда я пытаюсь соединиться с сайтом (который является 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 голосов
/ 28 ноября 2018

Насколько я понимаю, это не имеет ничего общего с HttpS.Хорошей идеей будет сделать анализ трафика, используя Чарльза или Фиддлера.Что вы видите ....

Страница, возвращенная с сервера в ответ на ваш первый вызов 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, которая работает не так, как в реальных браузерах.

0 голосов
/ 27 ноября 2018

Без URL, который вы запрашиваете, трудно сказать, что может быть не так.Однако, поработав некоторое время назад с модулем HTML, я обнаружил, что он выходит из строя на многих сайтах, с которых мне нужно было получать данные.Владельцы сайта сделают много вещей, чтобы вы не использовали программы для доступа к ним, и вам, возможно, придется прибегнуть к использованию некоторой библиотеки более низкого уровня, такой как Apache HTTP компоненты , где у вас есть больший контроль над тем, что происходит внутри..

Также проверьте, построен ли сайт с использованием JavaScript, который становится все более популярным, но усложняет использование программ для опроса контента.

...