FlareSolverr
FlareSolverr — это headless-Chrome за HTTP API, который рендерит сайт, проходит JS-проверку и возвращает финальный HTML + cookies + UserAgent. Lampac умеет:
- Глобально ходить через FlareSolverr для опт-ин балансеров и для JS-модулей с
transport:"flaresolverr". - Кэшировать cf_clearance / _ddg1 / прочие куки на 25 минут — после одного solve дальше летит обычный uTLS-Chrome (миллисекунды вместо 10–15 секунд).
- Совмещать с residential SOCKS5 — Chrome внутри FlareSolverr дойдёт до сайта через ваш прокси, обходя одновременно JS-челлендж и геоблок.
Запуск самого FlareSolverr
docker run -d --restart=always \
--name=flaresolverr \
-p 127.0.0.1:8191:8191 \
-e LOG_LEVEL=info \
ghcr.io/flaresolverr/flaresolverr:latestКонфигурация в lampac
[online]
flaresolverr = "http://127.0.0.1:8191"
flaresolverr_balancers = ["kinogo", "vdbmovies", "kinobase", "redheadsound"]flaresolverr_balancers — список opt-in балансеров и JS-модулей. Если балансер в списке — все его CF-fetch’и пойдут через FlareSolverr; если нет — стандартный путь без него. Можно править на лету через admin API, без перезапуска.
Совмещение с residential SOCKS5
Если для того же балансера зарегистрирован SOCKS5 (через [[proxy.direct.entries]] с balancers=["..."], или через VLESS-pool), Lampac автоматически передаёт его в FlareSolverr — Chrome дёрнет сайт через прокси.
[online]
flaresolverr = "http://127.0.0.1:8191"
flaresolverr_balancers = ["redheadsound"]
[[proxy.direct.entries]]
uri = "socks5://ua-residential.example.com:1080"
balancers = ["redheadsound"]Получится: lampac → FlareSolverr → Chrome → SOCKS5 (UA residential) → upstream. Один round-trip, JS-челлендж пройден, IP — украинский.
Использование в JS-модулях
var res = http.get('https://target.example/page', {
transport: 'flaresolverr',
// proxy: 'socks5://1.2.3.4:1080', // опц. явный override
// balancer: 'mymodule', // опц. — имя из реестра прокси
timeout: 60 // FlareSolverr медленный
});
if (res.ok) {
console.log('html', res.text.length, 'bytes');
console.log('cookies', res.cookies); // cf_clearance + sessions
}Если глобальный flaresolverr URL пуст или модуль не в flaresolverr_balancers (и Force=true не задан), ветка transport:'flaresolverr' тихо падает на обычный клиент — поведение деградирует, ошибок не вылетает.
Кэш сессий
После одного успешного solve FlareSolverr-результат (cookies + UA) кладётся в in-memory кэш по host. Следующие 25 минут запросы к тому же хосту идут без FlareSolverr — обычным uTLS-клиентом с подгруженными cookies. Если CDN ротировал challenge (403/503) — кэш инвалидируется, делается новый solve.
Эту логику дёргает любой Go-балансер парой строк:
import "lampac-go/internal/httpclient"
client, sess, ok := httpclient.FlareSolverrSessionClient(ctx, "kinogo", url, nil)
if ok {
resp, _ := client.Do(req) // с cf_clearance, без FlareSolverr
}Admin API
Есть live-эндпойнт для редактирования URL/балансеров и просмотра кэша.
Получить состояние
curl -H 'Cookie: lampac_token=...' \
https://your-lampac.example/admin/api/flaresolverrОтвет:
{
"url": "http://127.0.0.1:8191",
"balancers": ["kinogo","redheadsound"],
"sessions": [
{"host":"kinogo.fm","user_agent":"Mozilla/5.0...",
"solved_at_unix": 1745605200, "expires_at_unix": 1745606700}
]
}Изменить URL и список балансеров
curl -X PUT -H 'Cookie: lampac_token=...' \
-d '{"url":"http://127.0.0.1:8191","balancers":["kinogo","vdbmovies"]}' \
https://your-lampac.example/admin/api/flaresolverrПрименяется немедленно к runtime-реестру. Также синхронизируется в live-конфиг (serverRef.cfgPtr), чтобы следующее сохранение из редактора TOML записало новый список на диск.
Сбросить кэш для одного хоста
curl -X DELETE -H 'Cookie: lampac_token=...' \
'https://your-lampac.example/admin/api/flaresolverr?host=kinogo.fm'После этого следующий запрос к kinogo.fm снова пойдёт через FlareSolverr (для отладки).
Когда FlareSolverr не нужен
- Сайты без JS-челленджа — обычный
uTLS+SOCKS5справляется быстрее. - Геоблок без anti-bot — достаточно
transport:"utls-socks5"с residential прокси. - TSPU на YouTube CDN — здесь работает zapret на kernel-уровне, FlareSolverr не нужен.
Лимиты
- Один FlareSolverr-solve занимает 5–15 секунд (Chrome старт + JS-челлендж).
- Контейнер ест ~300–500 МБ RAM (один Chrome instance).
- Для нагруженных сетапов запускайте несколько контейнеров за reverse-proxy с round-robin.