diff --git a/webtoon_downloader/core/webtoon/client.py b/webtoon_downloader/core/webtoon/client.py index d515deb..12c0cd7 100644 --- a/webtoon_downloader/core/webtoon/client.py +++ b/webtoon_downloader/core/webtoon/client.py @@ -45,6 +45,12 @@ RetryStrategy = Literal["exponential", "linear", "fixed"] +DEFAULT_REQUEST_TIMEOUT = httpx.Timeout(connect=15.0, read=30.0, write=30.0, pool=30.0) +"""Default timeout used for regular Webtoon page and API requests.""" + +IMAGE_STREAM_TIMEOUT = httpx.Timeout(connect=15.0, read=90.0, write=30.0, pool=30.0) +"""Longer read timeout for image streams because the CDN may pause before sending body bytes.""" + class WebtoonHttpClient: """ @@ -63,6 +69,7 @@ def __init__(self, proxy: str | None = None, retry_strategy: RetryStrategy | Non headers=self._generate_headers(), follow_redirects=True, proxy=self.proxy, + timeout=DEFAULT_REQUEST_TIMEOUT, transport=self._build_transport(), ) @@ -134,6 +141,7 @@ async def stream_image(self, url: str, quality: int | None = 100) -> AsyncGenera async with self._client.stream( "GET", url, + timeout=IMAGE_STREAM_TIMEOUT, headers={ "referer": WebtoonURL, **self._generate_headers(),