3.7 KiB
3.7 KiB
Прокси-ротация для GH-OAuth волн (recipe)
Рабочий proxy_patch.py: C:/Users/User/tmp/regfarm/github_oauth/proxy_patch.py (import + apply() в начале раннера, ДО import reg_http).
Архитектура (проверено)
- Панельный HTTP (
newapi_lib.Panel) — БЕЗ прокси, bind=False. Прокси-IP банятся панелями 403; панель сама держит только свой rate-limit. - GitHub (
gh_http.GHSession) — через прокси. GitHub 429 привязан к IP. - Авто-ротация в GHSession: обёртка
_req— приst == -1(URLError/таймаут) до 3 ретраев; на каждом ретраеnext(itertools.cycle(live))и ПОЛНАЯ пересборка opener:CookieJar сохраняется (сессия GitHub продолжается), меняются только ProxyHandler+addheaders. Без пересборки opener молча держит мёртвый прокси → волна 0/150.[ProxyHandler({http:p, https:p}), HTTPSHandler(context=ctx), HTTPHandler(), NoRedirect, HTTPCookieProcessor(self.jar)]
Подготовка пула перед КАЖДОЙ волной
# 1) alive-строки из БД бота
con = sqlite3.connect('C:/Users/User/Desktop/proxy_bot/proxies.db')
allp = [r[0] for r in con.execute("select proxy from pool where alive=1")]
# 2) re-verify ИМЕННО на github.com (не ip-api!) — ThreadPoolExecutor(40)
# GET https://github.com через прокси, timeout 12 → status 200 = good
# 3) json.dump(good, '_gh_proxies.json')
Порядок величин: БД 152 alive → ~11 живых для GitHub. alive=1 протухает за дни.
Диагностика мёртвой волны (0 ключей)
grep -E "!" _run_X.log | sort | uniq -c— массовыйstate fail: POST 429= GitHub rate-limit;URLError ... 10060= мёртвый прокси без ротации.- Ручной зонд панели: POST
/api/user/registerdirect vs через 3-4 прокси — 403 = панель банит прокси-IP, 429 = панель банит домашний IP, 200 = путь свободен.
Убийство зомби-волн (без taskkill /IM python.exe)
import subprocess
ps = r'''
Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match 'reg_proxy100' } |
ForEach-Object { Stop-Process -Id $_.ProcessId -Force; "killed $($_.ProcessId)" }
'''
subprocess.run(['powershell','-NoProfile','-Command',ps], capture_output=True, text=True)
Питфолы: wmic отсутствует в hermes-python; $_/$(...) внутри двойных кавычек из git-bash съедаются — powershell-скрипт только в python-heredoc с r''' строкой.
Per-panel индексы акков
used = {} # panel -> set(gh_login) из всех out/*.json где есть api_key
# idx = [i for i,a in enumerate(pool) if a['login'] not in used.get(panel,set())][:150]
# → _idx2_<panel>.txt
GitHub OAuth-приложения панелей независимы — один акк годен на каждой панели по разу. Глобальный «fresh» индекс занижает доступный пул.
Очередь волн (сериализация обязательна)
run(){ OUTNAME=out_${P}_big2 python reg_proxy100.py $P 0 0 $(cat _idx2_$P.txt) > _run_${P}_big2.log 2>&1; sleep 90-120; } — фоновый background=true, persist_on_release. 2+ параллельные волны = глобальный GitHub 429 (E45002).