fix(hqfap): Cloudflare JS-challenge -> tryb WebView zamiast phone-fetch
Some checks are pending
Backend tests / test (push) Waiting to run
Some checks are pending
Backend tests / test (push) Waiting to run
hqfap wdrozyl Cloudflare na strony /watch/ (2026-07-28): 403 z VPS ORAZ z residential IP, takze przy pelnym komplecie naglowkow przegladarki (strona glowna dalej 200, wiec blokada celuje w strony wideo). Phone-side resolveHqfapPage to zwykly fetch, wiec nie ma jak wykonac JS-challenge -> resolve padal i user ladowal na stronie hostera (bug-report 92e9133e 'Hqfap przekierowuje na strone'). Telemetria tego NIE pokazala: hqfap ma 99-100% do 26.07 i ZERO eventow od 27.07, bo blad wystepuje PRZED playerem, wiec event nie powstaje. Ten sam wzorzec co przy freshporno - przy takich zgloszeniach nie ufac samemu success-rate. Fix: hqfapcom -> _vps_blocked_fallback (WebView, Chrome engine + JS + cookie przechodzi challenge; INJECTED_JS i tak wylusknie mp4 i wroci na native player). Zdjety z PHONE_RESOLVE_ORIGINS i z lancucha phone-resolve w SceneDetail/Player.
This commit is contained in:
parent
90a63b1e77
commit
140764bfc5
3 changed files with 15 additions and 8 deletions
|
|
@ -210,7 +210,15 @@ _REGISTRY: dict[str, Callable[[str], list[StreamSource] | None]] = {
|
|||
# biblioteka serwowała `/upload/videos/video_down.mp4` stub), PRZYWRÓCONY 2026-07-07:
|
||||
# strona wróciła na CDN vstor.top z realnymi plikami (portable cross-IP, zweryfikowane),
|
||||
# user request. 4k69 zostaje usunięty (nie sprawdzany ponownie).
|
||||
"hqfapcom": hqfap.extract,
|
||||
# 2026-07-28: hqfap wdrożył Cloudflare z JS-challenge na strony /watch/ — 403 zarówno
|
||||
# z VPS, jak i z residential IP, także przy pełnym komplecie nagłówków przeglądarki
|
||||
# (strona główna dalej 200, więc blokada jest celowana w strony wideo). Phone-side
|
||||
# `resolveHqfapPage` (zwykły fetch) nie ma jak przejść challenge, więc padał i user
|
||||
# lądował na stronie zamiast na wideo (bug-report 92e9133e "Hqfap przekierowuje na
|
||||
# stronę"; telemetria to PRZEMILCZAŁA — zero eventów od 27.07, bo błąd jest przed
|
||||
# playerem). WebView (Chrome engine + JS + cookie) challenge przechodzi, więc
|
||||
# przełączamy na tryb WebView; INJECTED_JS i tak wyłuska mp4 i wróci na native player.
|
||||
"hqfapcom": _vps_blocked_fallback.extract,
|
||||
# javflix (JAV, WordPress) — przyciski serwerów to `<a class="myLink" href="<embed>">`
|
||||
# (streamtape/voe/doodstream/emturbovid). Generyczny _embed_iframe łapie je anchor-hoster
|
||||
# patternem → type='hoster', telefon resolwuje (voe backend, dood/filemoon phone-side).
|
||||
|
|
|
|||
|
|
@ -321,8 +321,6 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) {
|
|||
links = await (await import('../lib/epornerResolver')).resolveEpornerPage(resolvePageUrl);
|
||||
} else if (resolvePageUrl && playOrigin === 'tube:fpoxxx') {
|
||||
links = await (await import('../lib/fpoxxxResolver')).resolveFpoxxxPage(resolvePageUrl);
|
||||
} else if (resolvePageUrl && playOrigin === 'tube:hqfapcom') {
|
||||
links = await (await import('../lib/hqfapResolver')).resolveHqfapPage(resolvePageUrl);
|
||||
} else if (canBackendReresolve && sceneId && params.playbackId) {
|
||||
// Świeży resolve przez backend (VPS re-runuje extractor KVS → nowy nod + token).
|
||||
const res = await client.resolvePlayback(sceneId, params.playbackId);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ import { resolvePornxpPage } from '../lib/pornxpResolver';
|
|||
import { resolveSxyprnPage } from '../lib/sxyprnResolver';
|
||||
import { resolveEpornerPage } from '../lib/epornerResolver';
|
||||
import { resolveFpoxxxPage } from '../lib/fpoxxxResolver';
|
||||
import { resolveHqfapPage } from '../lib/hqfapResolver';
|
||||
import type { RootStackParamList } from '../navigation';
|
||||
import { theme } from '../theme';
|
||||
import type { PlaybackSource, SceneOut, StreamLink } from '../types';
|
||||
|
|
@ -626,7 +625,7 @@ function PlaybackButton({
|
|||
|
||||
// IP-bound tuby resolwowane phone-side: przekaż page_url, by Player mógł
|
||||
// re-resolve'ować świeży token gdy native padnie na initial-load (zmiana IP / TTL).
|
||||
const PHONE_RESOLVE_ORIGINS = ['tube:sxyprncom', 'tube:epornercom', 'tube:fpoxxx', 'tube:hqfapcom'];
|
||||
const PHONE_RESOLVE_ORIGINS = ['tube:sxyprncom', 'tube:epornercom', 'tube:fpoxxx'];
|
||||
nav.navigate('Player', {
|
||||
url: initialUrl,
|
||||
sceneId,
|
||||
|
|
@ -669,9 +668,11 @@ function PlaybackButton({
|
|||
? resolveFpoxxxPage
|
||||
: source.origin === 'tube:pornxpph'
|
||||
? resolvePornxpPage
|
||||
: source.origin === 'tube:hqfapcom'
|
||||
? resolveHqfapPage
|
||||
: null;
|
||||
: // hqfap zdjęty 2026-07-28: strona wdrożyła Cloudflare z JS-challenge na
|
||||
// /watch/ (403 dla każdego zwykłego fetcha, także z pełnym kompletem
|
||||
// nagłówków przeglądarki), więc phone-resolve tylko padał i zrzucał usera
|
||||
// na stronę hostera. Backend oznacza go teraz jako WebView-only.
|
||||
null;
|
||||
if (phoneResolver) {
|
||||
setResolving(true);
|
||||
try {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue