57 lines
7.0 KiB
Markdown
57 lines
7.0 KiB
Markdown
# NoneCap (nonecap.com) — hCaptcha solver API авторег + gateway
|
||
|
||
Live-подтверждено 2026-10-07: demo-solve через добытый ключ → HTTP 200 `{"status":"solved","token":"P1_...","user_agent":"Mozilla/5.0 (iPhone...)"}`.
|
||
|
||
## Что за сервис
|
||
|
||
- hCaptcha solver API. Signup = **1300 free credits**, без карты.
|
||
- Ключи `nc_live_<32+ chars>`. Токен решения `P1_*` инжектится в поле `h-captcha-response` цели вместе с **user_agent из ответа solve** (UA обязан совпадать с браузером, который сабмитит).
|
||
- Dashboard: `https://dashboard.nonecap.com` (Next.js Server Actions), API: `https://api.nonecap.com/v1`.
|
||
|
||
## Реверс API (из JS-рендера `nonecap.com/api-reference/` через patchright+прокси)
|
||
|
||
Raw curl не годится — docs JS-rendered (`HTTP 200 size:0`, sitemap 404). Рендерить браузером через прокси.
|
||
|
||
- `POST /v1/solves?wait=N` — body `{"type":"hcaptcha","sitekey":"...","url":"..."}` → `{id, status, token, user_agent}`; 202 = poll `GET /v1/solves/{id}`.
|
||
- `GET /v1/solves?limit=N` — история (200 `{"object":"list","data":[...]}`).
|
||
- `DELETE /v1/solves/{id}`, `POST /v1/feedback` (report rejected solve).
|
||
- `GET /v1/me` — account info, НО требует отдельный scope ключа.
|
||
- Auth: `Authorization: Bearer nc_live_...`.
|
||
|
||
**Ключевой нюанс scopes**: solve-ключ отдаёт `GET /v1/me` → `403 {"error":"missing 'account' scope"}`. Это НЕ lock и НЕ мёртвый ключ — живость проверять демо-solve (`sitekey 10000000-ffff-ffff-ffff-000000000001`, `url https://demo.hcaptcha.com/`) или `GET /v1/solves`. Отличать от реального lock: `account_locked` приходит в теле ошибки solve/логина.
|
||
|
||
## Signup-флоу (работает)
|
||
|
||
1. **Почта**: Voidash API (`POST https://api.voidash.com/api/v1/inboxes {"domain":X}` → session_key Bearer; чтение `GET /api/v1/messages`, полный текст `GET /api/v1/messages/{id}`).
|
||
- `voidash.bond` ЗАБАНЕН как disposable («Please sign up with a permanent email address»).
|
||
- **`govno.eu.cc` / `musor.eu.cc` / `pomoi.eu.cc` проходят** signup-валидацию. Проверять новые домены probe-сабмитом без валидного turnstile — текст ошибки выдаст disposable-бан.
|
||
- t-online IMAP-пул не годится: verify-письмо не приходит (0 писем в 5 папках за 150с). Gmail — canonicalization.
|
||
2. **Гео/IP**: dashboard и API геоблочат/403-ят локальный IP Влада. Всё — через HTTP-прокси (patchright `proxy=` + urllib ProxyHandler). Мёртвый прокси → `ERR_TUNNEL_CONNECTION_FAILED` / `ERR_TIMED_OUT`; итерировать пул.
|
||
3. **Turnstile**: sitekey `0x4AAAAAADkESu5VN02iaX-3`. Солвер — локальный sidecar `POST http://127.0.0.1:<port>/solve {"type":"turnstile","sitekey":...,"url":"https://dashboard.nonecap.com/signup","real_page":true}` бесплатно. 2captcha — только фолбэк (баланс $0 = ERROR_ZERO_BALANCE).
|
||
4. **Verify**: ссылка `https://dashboard.nonecap.com/verify?token=*** из письма Voidash → `page.goto(verify_link)`.
|
||
5. **АНТИ-LOCK (критично)**: verify-link сам аутентифицирует сессию. НЕ делать парольный login после verify — повторный вход с прокси → risk-lock аккаунта (`account_locked`, login-пароль умирает; так потеряны первые акки). После goto сразу `/keys`, проверить `page.url` не login/signup → сессия жива.
|
||
6. **Ключ**: на `/keys` клик `button:has-text("Reveal")` → regex `nc_live_[A-Za-z0-9_\-]+` из `document.body.innerText`.
|
||
7. **Персистенция**: сразу после verify писать строку `email:pass:PENDING` в `nonecap_accounts.txt`; после extraction — перезаписывать PENDING ключом (иначе фейл на шаге 6 теряет живой акк; password дублировать в `nonecap_state.json`).
|
||
|
||
## Recovery ключа (акк верифицирован, ключ не добыт)
|
||
|
||
- `tmp/nc_recover_key.py <email> <pass> <proxy1,proxy2,...>` — итерация проксей, логин, /keys, Reveal.
|
||
- **Login-страница НЕ имеет видимого Turnstile-виджета** — solve на `/login` таймаутит даже с `pre_actions` (fill email/password). Решение: солвить токен на `/signup` (тот же host+sitekey, виджет виден) — сервер принимает signup-токен и на login.
|
||
- Если sidecar занят чужим проектом (solve timed out при живом /health) — поднять выделенный инстанс `PORT=8878` и переключить скрипты env `SIDECAR_URL`.
|
||
|
||
## Репа (фулл-фарм-стек для агента)
|
||
|
||
`ArthurMonteiro08586/nonecap-autoreg-gateway` (public, Contents API push):
|
||
- `nonecap_register.py` — авторег (eu.cc-домены, прокси-ротация, анти-lock, PENDING, recovery).
|
||
- `nonecap_gateway.py` :9997 — stdlib http.server: ротация ключей+proxy-fallback, `POST /v1/solve` (+`{"stream":true}` SSE), `/v1/keys`, `/health`, `/dashboard`, `POST /pool/reload`, **`GET /files?path=...`** (whitelist Desktop/tmp/SESSION-BASE, traversal-guard, ≤2MB) — видимость артефактов для агентов. Auth `X-Gateway-Key` (ключ в gitignored `gateway_key.txt`).
|
||
- `agent_client.py` + `tools.json` — OpenAI function-calling схема: `hcaptcha_solve/gateway_health/gateway_pool/fs_list/fs_read/pool_reload` → HTTP. Смоук: health + fs_list + demo-solve.
|
||
- Локальный дев-копии: `Desktop/_PROJECTS/nonecap_autoreg/`.
|
||
|
||
## Питфолы
|
||
|
||
1. `/v1/me` 403 missing scope ≠ lock (см. выше).
|
||
2. Прокси-пул `tmp/live_http_proxies.txt` деградирует быстро (3 живых из 36) — probe перед батчем (`nc_proxy_probe.py` по ЦЕЛЕВОМУ url, не ipify).
|
||
3. Disposable-домены: бан по домену на signup, не по email — ротация local-part не лечит, ротация ДОМЕНА лечит.
|
||
4. Background-процессы старых прогонов (до фикса доменов/прокси) присылают stale-фейлы в уведомления — сверять email-домен в тексте фейла, прежде чем чинить уже починенное.
|
||
5. write_file маскирует `nc_live_...`-строки и «Bearer » — ключи читать regex'ом из файла в рантайме, в выводах печатать только префикс+длину.
|