Модуль test-cookie-module github.com/kyprizel/testcookie-nginx-module Упрощенно, модуль шифрует какую-то строку, идентифицирующую клиента, и клиент должен в браузере их расшифровать и результат кинуть в куки, чтобы последующие запросы начали проходить.
По дефолту это IP-адрес. В JS коде клиенту приходит ключ, вектор инициализации и строка, которую нужно расшифровать. Если в качестве источника данных используется IP, достаточно загрузить и решить загадку для каждого бота. Результат назначить им куки, чтобы они могли работать дальше.
В случае использования источников, напрямую контролируемых клиентом (на этом форуме используется User-Agent), достаточно вычислить результат один раз. С дефолтным ответом модуля извлечение данных для вычисления ответа выглядит так: my( $key, $iv, $str) = map{ pack "H*", $_ } $html =~ m/"([a-z0-9]{32})"/g; Да, вот так просто :) Вычисление ответа: use Crypt::CBC ;
use Crypt::OpenSSL::AES ;
...
my $cipher = Crypt::CBC->new(
'-key' => $key