В планах опубликовать модуль запросов с возможностью подмены отпечатка JA3. Грубо говоря, это полная замена текущего HTTP-клиента способная обходить CloudFlare (и не нужно узнавать IP сайта для обхода).
Среда: Node.js. Основа: CycleTLS, tough-cookie.
Так как Node.js даже в мгнопоточном скрипте запускается в одном экземпляре, полагаю сильных проблем с производительностью возникнуть не должно. Если ошибаюсь, пожалуйста, поправьте меня.
Что планируется реализовать или уже реализовано в первую очередь:
- GET/POST запросы (позже PUT/DELETE/PUTCH).
- Легкая подмена JA3 отпечатка (идентичная известным сигнатурам браузера и их связь с User-Agent). Информирование в топике об известных валдиных сигнатурах. Возможность задавать свой JA3 отпечаток или использовать уже предустановленные сигнатуры. В приоритете сигнатуры Google Chrome (
потому что я ненавижу корпорацию Google, потому что им пользуется большинство людей, и в BAS эти отпечатки бесплатны). В конечном итоге FingerprintSwitcher не нужен.
- Включение и отключение редиректа (реализация собственного редиректа, потому что в CycleTLS нельзя адекватно устанавливать cookie при включенном редиректе).
- Возможность нормально парсить "Set-Cookie", если это необходимо (допустим, это нужно если отключен редирект или хочется модифицировать эти cookie).
- Автоматическая история cookies для запросов (сохранение и передача, как в текущем HTTP-клиенте). Проверка валидных cookie и их исправление. Возможность добавления собственных cookie, указав только имя, значение и домен. Всё согласно специцикации RFC6265.
- Конвертация текущей истории cookie в валидные cookie для браузера и HTTP-клиента BAS (то есть конвертация в полукриовай формат BAS без объяснений и спецификации
прошу не бейте меня).
- Дефолтный порядок заголовков, соответствующий браузерному. Возможность устанавливать свой порядок заголовков (а не как сейчас, то есть получается никак).
- Обертка запросов с настройками количества повторов запроса и их задержкой при неудачном статусе запроса (чтобы самому не городить огромные проверки на статусы в циклах). Возможность отключить обертку, чтобы делать как обычно при текущем HTTP-клиенте.
- Включение и отключение остановки потока, если за указанное количество повторов в обертке запрос не приобрел успешный статус (с отображением в логе).
- Автоматическая проверка и кодирование URL-адреса перед отправкой запроса (не нужно дополнительно кодировать сайты с русскими доменами).
- Автоматическое вычисление заголовка "Content-Length" при POST запросе (почему бы и не да? И вроде CycleTLS делает это сам).
- Режим отладки: в консоль выводится URL, STATUS, BODY, HEADERS, JA3, USER_AGENT (потому что обычная панель запросов BAS будет недоступна).
- Реализация и описание в топике базовых известных ошибок (например, неправильного URL, неправильного тела POST запроса, ошибок Cookie и т.д.)
Моя прошлые идеи решения проблемы:
Недостатки использование CycleTLS:
Если тема окажется актуальной, попробую реализовать предложенные функции.