64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
"""
|
|
Анализ HTTP 300-редиректов CDN one-way.work
|
|
"""
|
|
import asyncio
|
|
import sys
|
|
from pathlib import Path
|
|
sys.path.insert(0, '/app')
|
|
from src.browser import BrowserManager
|
|
from src.scraper import _extract_images_from_js, _navigate_with_retry
|
|
|
|
|
|
async def main():
|
|
url = "https://3.readmanga.ru/magicheskaia_bitva/vol1/1?mtr=1"
|
|
referer = "https://3.readmanga.ru/magicheskaia_bitva"
|
|
|
|
async with BrowserManager(headless=True) as bm:
|
|
ctx, page = await bm.new_page()
|
|
|
|
all_responses = {}
|
|
|
|
async def on_response(r):
|
|
if "one-way.work" in r.url or "staticfa" in r.url:
|
|
all_responses[r.url] = {
|
|
"status": r.status,
|
|
"headers": dict(r.headers),
|
|
}
|
|
|
|
page.on("response", on_response)
|
|
|
|
await _navigate_with_retry(page, url, referer=referer)
|
|
await asyncio.sleep(3)
|
|
|
|
imgs = await _extract_images_from_js(page)
|
|
print(f"Изображений в readerInit: {len(imgs)}")
|
|
print(f"Перехвачено ответов: {len(all_responses)}")
|
|
|
|
# Покажем первые несколько — статус и заголовки
|
|
for img_url, data in list(all_responses.items())[:5]:
|
|
print(f"\n--- {img_url[:80]} ---")
|
|
print(f" Status: {data['status']}")
|
|
for k, v in data['headers'].items():
|
|
if k.lower() in ('location', 'content-type', 'content-length', 'x-redirect', 'x-accel'):
|
|
print(f" {k}: {v}")
|
|
|
|
# Теперь попробуем прямой запрос через playwright request
|
|
print("\n\n=== Прямой запрос через context.request ===")
|
|
if imgs:
|
|
test_url = imgs[5]
|
|
print(f"URL: {test_url}")
|
|
try:
|
|
resp = await ctx.request.get(test_url, headers={"Referer": referer})
|
|
print(f"Status: {resp.status}")
|
|
print(f"Headers: {dict(resp.headers)}")
|
|
body = await resp.body()
|
|
print(f"Body size: {len(body)} bytes")
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
await ctx.close()
|
|
|
|
|
|
asyncio.run(main())
|
|
|