diff --git a/src/apify_client/_http_client.py b/src/apify_client/_http_client.py index a3fb20bc..241b9408 100644 --- a/src/apify_client/_http_client.py +++ b/src/apify_client/_http_client.py @@ -10,6 +10,7 @@ from typing import TYPE_CHECKING, Any, Callable import httpx +from ssl import SSLContext from apify_shared.utils import ignore_docs, is_content_type_json, is_content_type_text, is_content_type_xml from apify_client._errors import ApifyApiError, InvalidResponseBodyError, is_retryable_error @@ -37,6 +38,7 @@ def __init__( min_delay_between_retries_millis: int = 500, timeout_secs: int = 360, stats: Statistics | None = None, + ssl_ctx: SSLContext | str | bool = True, ) -> None: self.max_retries = max_retries self.min_delay_between_retries_millis = min_delay_between_retries_millis @@ -58,8 +60,10 @@ def __init__( if token is not None: headers['Authorization'] = f'Bearer {token}' - self.httpx_client = httpx.Client(headers=headers, follow_redirects=True, timeout=timeout_secs) - self.httpx_async_client = httpx.AsyncClient(headers=headers, follow_redirects=True, timeout=timeout_secs) + self.httpx_client = httpx.Client(headers=headers, follow_redirects=True, timeout=timeout_secs, verify=ssl_ctx) + self.httpx_async_client = httpx.AsyncClient( + headers=headers, follow_redirects=True, timeout=timeout_secs, verify=ssl_ctx + ) self.stats = stats or Statistics() diff --git a/src/apify_client/client.py b/src/apify_client/client.py index 435ef546..1b917394 100644 --- a/src/apify_client/client.py +++ b/src/apify_client/client.py @@ -1,4 +1,5 @@ from __future__ import annotations +from ssl import SSLContext from apify_shared.utils import ignore_docs @@ -70,6 +71,7 @@ def __init__( max_retries: int | None = 8, min_delay_between_retries_millis: int | None = 500, timeout_secs: int | None = DEFAULT_TIMEOUT, + ssl_ctx: SSLContext | str | bool = True, ) -> None: """Initialize a new instance. @@ -87,6 +89,7 @@ def __init__( self.max_retries = max_retries or 8 self.min_delay_between_retries_millis = min_delay_between_retries_millis or 500 self.timeout_secs = timeout_secs or DEFAULT_TIMEOUT + self.ssl_ctx = ssl_ctx def _options(self) -> dict: return { @@ -109,6 +112,7 @@ def __init__( max_retries: int | None = 8, min_delay_between_retries_millis: int | None = 500, timeout_secs: int | None = DEFAULT_TIMEOUT, + ssl_ctx: SSLContext | str | bool = True, ) -> None: """Initialize a new instance. @@ -126,6 +130,7 @@ def __init__( max_retries=max_retries, min_delay_between_retries_millis=min_delay_between_retries_millis, timeout_secs=timeout_secs, + ssl_ctx=ssl_ctx, ) self.stats = Statistics() @@ -135,6 +140,7 @@ def __init__( min_delay_between_retries_millis=self.min_delay_between_retries_millis, timeout_secs=self.timeout_secs, stats=self.stats, + ssl_ctx=self.ssl_ctx, ) def actor(self, actor_id: str) -> ActorClient: diff --git a/uv.lock b/uv.lock index dbd53882..dec2fcfb 100644 --- a/uv.lock +++ b/uv.lock @@ -19,7 +19,7 @@ wheels = [ [[package]] name = "apify-client" -version = "1.10.0" +version = "1.10.1" source = { editable = "." } dependencies = [ { name = "apify-shared" },