vault ключей + мост abuse-radar + китайские источники: всё в одном реестре
- omni/vault.py: пул ключей парсеров (env-first, data/vault.json, ротация, cooldown 401/402/403=1ч, 429=10м), только маски в выводе - tools/build_vault.py: сборка пула из MASTER_KEYS.csv и локальных дампов (значения не в git) - tools/vault_check.py: живая проверка с маскированием - searchers: firecrawl/tavily/exa/serper/jina/apify берут ключ из vault, если нет env - omni radar: домены+каналы из radar_server.db -> реестр, --import-posts заливает посты каналов - radar-источники помечены opt_in: общий обход не тормозят (869 против 3337 всего) - omni/sources_cn.py + tools/wave_cn.py: 9 живых китайских источников (52pojie, nodeseek, kanxue, anquanke, 4hou, xz.aliyun, ithome, cnbeta, v2ex) - net.get(proxy=...): принудительный прокси для CF-площадок - /api/keys + строка ключей в панели - tests/test_vault_radar.py: 7 тестов, всего 29 passed
This commit is contained in:
14
omni/net.py
14
omni/net.py
@@ -117,8 +117,11 @@ def post_json(url, payload, headers=None, timeout=None):
|
||||
return Resp(url, 0, "", "curl-post", f"{type(e).__name__}: {e}"[:160])
|
||||
|
||||
|
||||
def get(url, headers=None, timeout=None, json_mode=False):
|
||||
"""Лестница: httpx -> curl_cffi -> curl_cffi с прокси. Возвращает первый осмысленный ответ."""
|
||||
def get(url, headers=None, timeout=None, json_mode=False, proxy=None):
|
||||
"""Лестница: httpx -> curl_cffi -> curl_cffi с прокси. Возвращает первый осмысленный ответ.
|
||||
|
||||
proxy=... — принудительный прокси для конкретного источника (напр. CF-форумы через DE).
|
||||
"""
|
||||
timeout = timeout or _cfg.get("timeout", 25)
|
||||
host = urllib.parse.urlsplit(url).netloc
|
||||
_throttle(host)
|
||||
@@ -132,6 +135,13 @@ def get(url, headers=None, timeout=None, json_mode=False):
|
||||
if ck:
|
||||
h["Cookie"] = ck
|
||||
|
||||
if proxy:
|
||||
forced = _try_curl(url, h, timeout, proxy)
|
||||
if forced.ok and not forced.blocked:
|
||||
return forced
|
||||
alt = _try_httpx(url, h, timeout, proxy)
|
||||
return alt if alt.status == 200 else forced
|
||||
|
||||
first = _try_httpx(url, h, timeout, None)
|
||||
if first.ok and not first.blocked:
|
||||
return first
|
||||
|
||||
Reference in New Issue
Block a user