feature: UA и отпечаток задаются профилю один раз, cookies запроса заменяют профильные

- user_agent записывается в профиль при первом запросе сессии, дальше игнорируется (#87)
- переданные cookies заменяют cookies профиля (clear_cookies перед add_cookies) (#88)
- без user_agent профилю генерируется отпечаток browserforge (Linux Chrome): UA с версией
  установленного Chrome, экран и devicePixelRatio; только нативная эмуляция, без JS (#89)
- make fp-check: проверка, что отпечаток применяется и стабилен, и доля различий профилей

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
protokeyandClaude Opus 5.5 committed 2026-10-13 17:23:01 +04:00
1 parent a399f7f8cc
commit 58100fa45d
9 files changed
+215 -29

No files matched your search

+4 -2
View File
@@ -38,12 +38,12 @@ Client → Caddy (TLS, on the host) → FastAPI POST /v1/solve → browser slot
reCAPTCHA, hCaptcha) are solved via the client's 2captcha key.
- **Proxies**: not managed by the service — the client may supply their own proxy per request. Browser locale and
timezone are derived from the proxy's exit IP.
- **Sessions**: `session_id` cookie → persistent Chrome profile (cookies, local storage, user agent) on disk.
- **Sessions**: `session_id` cookie → persistent Chrome profile on disk. User agent and fingerprint (screen, DPR) are
fixed on the first request of a session; cookies passed in a request replace the profile's cookies.
- **Logging**: stdout, level from `LOG_LEVEL`; client secrets (proxy credentials, 2captcha key, `fill` values,
cookie values) are masked.
- **Deployment**: single Docker container; TLS is terminated by Caddy on the host — see
[docs/Deployment.md](docs/Deployment.md).
- **Canvas fingerprint** is generated anew for every session by design.
### Project layout
@@ -51,6 +51,7 @@ Client → Caddy (TLS, on the host) → FastAPI POST /v1/solve → browser slot
src/
main.py # FastAPI app: /v1/solve, /health, slots, sessions, response
api/
profile.py # per-profile user agent and generated fingerprint
schemas.py # SolveRequest / ActionRequest / SolveResponse + validation
actions.py # action registry and execution
geoip.py # proxy → locale / timezone
@@ -67,6 +68,7 @@ src/
docs/ # API, deployment, anti-bot notes
tests/
loadtest.py # concurrent load test + docker stats
fingerprint_check.py # profile fingerprints are applied and stable (make fp-check)
test_main.http # manual requests (JetBrains HTTP client)
wheels/ # wheels for offline install on Ubuntu Noble
Dockerfile