# Возможности и ограничения

DuckoNet 0.11.5 предоставляет синхронный и асинхронный HTTP-клиент с браузерными сетевыми профилями. Библиотека сама подготавливает установку и обновляет подписанные профили при открытии клиента. Пользователь указывает API-ключ и браузер.

## Системы и браузеры

| Компонент | Поддерживается |
|---|---|
| Python | CPython 3.12, стандартная сборка с GIL |
| Windows | x64; системные условия — в [инструкции установки](install.html) |
| Linux | Ubuntu 24.04, x64 |
| Free | Chrome 150; Microsoft Edge 151 |
| Pro | Chrome 151–155; Microsoft Edge 156 |

Конкретные полные версии перечислены в [инструкции установки](install.html). Выбор ограничивается доступными профилями и правами API-ключа. Firefox, Safari, Android, macOS, ARM и другие версии Python не поддерживаются этим пакетом.

## Запросы и ответы

`HttpClient` и `AsyncHttpClient` поддерживают параметры URL, JSON, формы, байтовые тела и файлы multipart. Они обрабатывают перенаправления, сохраняют повторяющиеся заголовки и автоматически используют cookies. Ответ можно получить целиком либо прочитать по частям. Для прямой работы с браузерным контекстом и ответами в байтах существуют `Client` и `AsyncClient`.

Доступны HTTP/1.1, HTTP/2 и HTTP/3. У `HttpClient` режимы `protocol='h3'` и `protocol='auto'` допускают HTTP/2 и переход на HTTP/3 после получения подходящего объявления сервера. Первый запрос поэтому не обязан использовать QUIC. Фактический протокол указан в `response.protocol`. Выбор режима подробно описан в разделе [Прокси и управление](advanced.html).

| Настройка | Значение по умолчанию | Максимум или ограничение |
|---|---|---|
| Таймаут запроса | 30 секунд | 300 секунд на подготовку и выполнение запроса, включая перенаправления и чтение |
| Отправляемое тело | — | 16 MiB вместе с разделителями multipart; целиком подготавливается в памяти |
| Тело ответа в памяти | 1 MiB | 64 MiB; для больших ответов используйте `stream()` или `consume()` |
| Заголовки ответа | 64 KiB | 1 MiB |
| Перенаправления | 20 | До 100; переход с HTTPS на HTTP требует `allow_downgrade=True` |
| Маршруты одного клиента | Один начальный | До 8 сочетаний протокола и прокси за время жизни клиента |

Лимит потоков тарифом не устанавливается. Доступная параллельность зависит от ресурсов системы и настроек сессий. Пределы размеров и маршрутов действуют на обоих тарифах.

## Прокси, URL и данные

Прокси задаётся явно: строкой URL или `ProxyRoute`. Поддерживаются HTTP, HTTPS, SOCKS5 и SOCKS5H при наличии соответствующих возможностей у профиля. В 0.11.5 HTTP/3 к сайту предоставляется через явный `MasqueProxy` с HTTPS/H2 CONNECT-UDP; обычные HTTP/SOCKS URL не дают UDP-туннель. [Параметры MASQUE](masque.html). При отказе прокси библиотека не переключается на прямое соединение.

URL должен быть абсолютным адресом HTTP(S). Домен с Unicode-символами не преобразуется автоматически в IDNA. IPv6-адрес непосредственно в URL у `HttpClient` не поддерживается. Фрагмент после `#` не отправляется серверу.

Cookies сохраняются в памяти клиента. Для использования после перезапуска нужно вызвать `export_data()`, сохранить результат и затем восстановить его через `import_data()`. Каталог `state_dir` хранит установку библиотеки, а не пользовательские cookies.

Тело gzip-ответа распаковывается автоматически. `Content-Length` при этом может содержать размер сжатого тела; для размера полученных данных используйте `len(response.content)`.

В 0.11.5 [WebSocket](websocket.html) предоставляется `HttpClient`/`AsyncHttpClient` через HTTP/1.1 Upgrade со сжатием и sync/async методами. WebSocket-over-H2/H3 отсутствует. Потоковая отправка тела HTTP-запроса и отдельные HTTP таймауты подключения и чтения не предоставляются этим API.

## Что означает браузерный профиль

Профиль задаёт параметры TLS и HTTP выбранной версии браузера. Сам запрос — его адрес, метод, заголовки и тело — формирует приложение. Произвольный набор пользовательских заголовков может отличаться от того, который отправил бы браузер.

`HttpClient` не исполняет браузерный Fetch: он не проверяет CORS и не отправляет preflight. Поле `assurance='custom-request'` отмечает этот режим работы. Диагностика показывает логические заголовки запроса, а не байтовую запись TLS или кадров HTTP/2 и HTTP/3.

Полные параметры и правила обработки ответа находятся в [справочнике API](reference.html). Примеры запросов, файлов и потоков — в [практическом руководстве](quickstart.html).
