За годы разработки парсеров крупных досок объявлений, встречались разные и довольно интересные защиты, нам есть чем поделиться. Если читателям хабра будет интересно, можно сделать еще несколько статей на эту тему
Есть апи, но оно, к сожалению, нам не подходит. Запрашивать данные можно в очень маленьком количестве и раз в определенное время ~1час. Нам же нужно максимально быстро получать изменения/новые объявления
Верно, это был один из вариантов, но это только TCP. А как же обертка для работы с HTTP? Самому писать не очень хотелось, сроки поджимали, клиенты возмущались, к тому же не смог найти адекватное решение использование прокси
Как раз под капотом CycleTLS, используется эта либа. CycleTLS - более удобная обертка над utls, мне легче было подключить ее и немного подтюнить под свои нужды
Коллеги, вы мою библиотеку кажется неправильно понимаете. Данная библиотека позиционируется как синтаксический сахар. После присваивания атрибута моментально генерится конструктор в compile time. Поля все так же обязательны, ведь конструктор никуда не девается, он все так же есть, просто за вас его пишет машина. Такое ощущение, что вы не разобрались и делаете выводы. Пожалуйста, ознакомьтесь со статьей ещё раз
Коллеги, вы мою библиотеку кажется неправильно понимаете. Данная библиотека позиционируется как синтаксический сахар. После присваивания атрибута моментально генерится конструктор в compile time
Не совсем. Целевой проект референсит пакет как анализатор. Мы не можем ссылаться на внутренние классы анализатора, поэтому пакет анализатора подтягивает за собой ещё один пакет, в котором содержатся атрибуты. На счёт разметки атрибута, вы правы. Не подумал об этом. Спасибо, поправлю
Если нужна дополнительная логика в конструкторе, то очевидно можно написать обычный конструктор. Никто ведь не говорит: «Если ты используешь Inject, не используй конструкторы».
«Не всегда все параметры идут через DI»
Генератор создаст точной такой конструктор, который вы бы написали ручками. Это значит, что вы не ограничиваетесь одним DI. Класс можно проинициализировать самим
Абсолютно согласен. Вспомним синтаксические сахары: using, lock. Разве они снижают понятность? Нет! Так вот, данный генератор — это такой же синтаксический сахар. И я искренне не могу понять в чем сложность? Мне кажется, что взглянув на такой класс — все интуитивно понятно
А что с юнит тестами не так? Генератор создаст точно такой же конструктор, который вы бы написали ручками. Это просто синтаксический сахар. Я лишь предложил альтернативу. А то, что удобнее для вас, выбираете вы сами!
Невозможно избавиться от грамотных парсеров, а подобные защиты - это защиты от студентов
Ого, впервые встретил человека с похожим бэкграундом. Очень приятно! Возможно следующая статья будет о том, как обойти ProofOfWork на сайтах
За годы разработки парсеров крупных досок объявлений, встречались разные и довольно интересные защиты, нам есть чем поделиться. Если читателям хабра будет интересно, можно сделать еще несколько статей на эту тему
Слышал, что BoringSSL используется в Andoid-е, но не думал, что и в хромиуме. Спасибо за информацию!
Есть известный домен, который меньше него
Есть апи, но оно, к сожалению, нам не подходит. Запрашивать данные можно в очень маленьком количестве и раз в определенное время ~1час. Нам же нужно максимально быстро получать изменения/новые объявления
Кто не поленится перевести, для того не жалко ;)
Верно, это был один из вариантов, но это только TCP. А как же обертка для работы с HTTP? Самому писать не очень хотелось, сроки поджимали, клиенты возмущались, к тому же не смог найти адекватное решение использование прокси
Как раз под капотом CycleTLS, используется эта либа. CycleTLS - более удобная обертка над utls, мне легче было подключить ее и немного подтюнить под свои нужды
Поправил, спасибо!
Думаю на счёт ухудшения читаемости вы преувеличиваете. Все интуитивно понятно ( возможно только для меня )
Коллеги, вы мою библиотеку кажется неправильно понимаете. Данная библиотека позиционируется как синтаксический сахар. После присваивания атрибута моментально генерится конструктор в compile time. Поля все так же обязательны, ведь конструктор никуда не девается, он все так же есть, просто за вас его пишет машина. Такое ощущение, что вы не разобрались и делаете выводы. Пожалуйста, ознакомьтесь со статьей ещё раз
Не совсем. Целевой проект референсит пакет как анализатор. Мы не можем ссылаться на внутренние классы анализатора, поэтому пакет анализатора подтягивает за собой ещё один пакет, в котором содержатся атрибуты. На счёт разметки атрибута, вы правы. Не подумал об этом. Спасибо, поправлю
Если нужна дополнительная логика в конструкторе, то очевидно можно написать обычный конструктор. Никто ведь не говорит: «Если ты используешь Inject, не используй конструкторы».
«Не всегда все параметры идут через DI»
Генератор создаст точной такой конструктор, который вы бы написали ручками. Это значит, что вы не ограничиваетесь одним DI. Класс можно проинициализировать самим
Абсолютно согласен. Вспомним синтаксические сахары: using, lock. Разве они снижают понятность? Нет! Так вот, данный генератор — это такой же синтаксический сахар. И я искренне не могу понять в чем сложность? Мне кажется, что взглянув на такой класс — все интуитивно понятно
А что с юнит тестами не так? Генератор создаст точно такой же конструктор, который вы бы написали ручками. Это просто синтаксический сахар. Я лишь предложил альтернативу. А то, что удобнее для вас, выбираете вы сами!