chore(seekplayer): przestan przekazywac martwy cf_fallback

Zadanie bylo "podpiac albo usunac". Sprawdzone i NIE DA SIE podpiac.

Fallback za Cloudflare (svb.professionalvisibility.cyou/...cf-master.<ts>.txt)
oddaje 403 w szesciu wariantach:

    httpx + Referer hostera        httpx + Referer galaxyporn.net
    curl_cffi chrome120 z Ref      curl_cffi bez Ref (oddaje strone CF)
    znacznik czasu biezacy         znacznik z linku glownego

I to samo 403 z lacza RESIDENTIAL, wiec to nie blokada datacenter. Adres
jest najpewniej zwiazany z sesja tego samego wywolania /api/v1/video,
a my siegamy po niego osobno i po czasie (znacznik w nazwie pliku bywa
5 dni stary). Podpiecie dokladaloby request, ktory ZAWSZE pada, na
sciezce bledu — czyli opoznienie zamiast ratunku.

Cel, ktoremu mial sluzyc (przezyc padniety nod CDN), jest juz osiagniety
inaczej: ponowny resolve wraca z innym adresem CDN (47547fe).

`proxy_no_verify` ZOSTAJE mimo ze nic go nie czyta: zapisuje realne
ryzyko (cert niepasujacy do golego IP), a jego usuniecie skasowaloby te
informacje. Falszywy komentarz o istniejacej galezi `verify=False` juz
poprawiony.

Wszystkie szesc prob zapisane w docstringu, zeby nikt ich nie powtarzal.
Kontrola po zmianie: extractor oddaje m3u8, proxy 200.
This commit is contained in:
goon-foss 2026-08-14 10:29:02 +02:00
parent 47547fe694
commit f70082e7de

View file

@ -139,7 +139,6 @@ def extract(page_url: str, *, timeout: float = 30.0) -> list[StreamSource] | Non
raise HosterDead(f"seekplayer-engine {page_url}: {data['error']}")
source = (data.get("source") or "").strip()
cf = (data.get("cf") or "").strip()
# Source: m3u8 na CDN edge pod GOŁYM IP (np. `185.237.107.146/v4/<sig>/<exp>/…/master.m3u8`).
# Token ma ~2,8 h TTL i NIE jest związany z IP (sprawdzone 2026-08-14), a węzły
@ -147,11 +146,27 @@ def extract(page_url: str, *, timeout: float = 30.0) -> list[StreamSource] | Non
# padnięcie odtwarzania na tym źródle leczy się ponownym resolve, a nie WebView-em
# (`BACKEND_RERESOLVE_ORIGINS` w PlayerScreen).
#
# UWAGA: `proxy_no_verify` i `cf_fallback` niżej NIE SĄ przez nic czytane. Wcześniejszy
# komentarz twierdził, że `stream_proxy.py` ma gałąź `verify=False` dla hostów-IP —
# nie ma jej, w tym pliku nie występuje słowo `verify` ani razu. W praktyce certyfikaty
# tych węzłów przechodzą weryfikację (fetch przez proxy oddaje 200), więc to flagi
# informacyjne, nie działające przełączniki.
# `proxy_no_verify` NIE JEST przez nic czytane. Wcześniejszy komentarz twierdził, że
# `stream_proxy.py` ma gałąź `verify=False` dla hostów-IP — nie ma jej, w tym pliku nie
# występuje słowo `verify` ani razu. W praktyce certyfikaty tych węzłów przechodzą
# weryfikację (fetch przez proxy oddaje 200), więc flaga jest informacyjna. Zostaje,
# bo zapisuje realne ryzyko: gdyby któryś nod zaczął serwować cert niepasujący do IP,
# trzeba będzie tę gałąź dopisać.
#
# `cf` (fallback za Cloudflare) CELOWO NIE JEST PRZEKAZYWANY DALEJ. Sprawdzone
# 2026-08-14, sześć wariantów, wszystkie 403:
#
# httpx + Referer hostera · httpx + Referer galaxyporn.net
# curl_cffi chrome120 z Refererem · curl_cffi bez Referera (oddaje stronę CF)
# znacznik czasu bieżący · znacznik z linku głównego
#
# I to samo 403 z łącza RESIDENTIAL, więc to nie jest blokada datacenter. Adres jest
# najpewniej związany z sesją tego samego wywołania `/api/v1/video`, a my sięgamy po
# niego osobno i po czasie (znacznik w nazwie pliku bywa 5 dni stary). Podpięcie go
# jako zapasowego źródła dokładałoby request, który ZAWSZE pada, na ścieżce błędu.
#
# Padnięcie pojedynczego noda leczy ponowny resolve: kolejne wywołania wracają z
# różnymi adresami CDN (`BACKEND_RERESOLVE_ORIGINS` w PlayerScreen, commit 47547fe).
sources: list[StreamSource] = []
if source:
sources.append(
@ -162,7 +177,6 @@ def extract(page_url: str, *, timeout: float = 30.0) -> list[StreamSource] | Non
referer=f"{host}/",
raw={
"proxy_no_verify": True,
"cf_fallback": cf or None,
"engine": "seekplayer",
},
)