add hotbunny provider + fix domain cookie scoping in requester

New channel: hotbunny (AI-generated hentai, hotbunny.ai JSON API).
Includes thumbnail proxy (/proxy/hotbunny-thumb/) since assets.hotbunny.ai
is CF bot-managed. check.py updated to treat CF-protected format URLs as
warnings rather than errors.

requester.rs: store_response_cookies now honours the Domain attribute in
Set-Cookie headers — cookies scoped to .domain.com are registered against
the parent domain so the wreq Jar returns them for sub.domain.com requests
automatically, without per-provider workarounds.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Simon
2026-06-24 18:40:57 +00:00
parent 8373d49593
commit 6d5771a038
9 changed files with 464 additions and 10 deletions

View File

@@ -69,6 +69,7 @@ _BROWSER_UA = "Mozilla/5.0 (X11; Linux x86_64; rv:146.0) Gecko/20100101 Firefox/
_CF_PROTECTED_HOSTS = {
"www.camsoda.com",
"camsoda.com",
"assets.hotbunny.ai",
}
@@ -277,12 +278,20 @@ def check_video(video: dict, channel_id: str, results: Results, run_ytdlp: bool)
continue
ok, code = http_ok(furl, headers=fheaders)
if not ok:
results.err(
channel_id,
f"{label} format[{j}]: unreachable HTTP={code}"
+ (f" (headers={list(fheaders.keys())})" if fheaders else "")
+ f": {furl}",
)
if _is_cf_protected(furl):
results.warn(
channel_id,
f"{label} format[{j}]: unreachable HTTP={code} (CF-protected host, expected)"
+ (f" (headers={list(fheaders.keys())})" if fheaders else "")
+ f": {furl}",
)
else:
results.err(
channel_id,
f"{label} format[{j}]: unreachable HTTP={code}"
+ (f" (headers={list(fheaders.keys())})" if fheaders else "")
+ f": {furl}",
)
else:
results.info(channel_id, f"{label} format[{j}]: OK (HTTP {code})")