DuckoNetДокументация0.11.6Документация DuckoLab
Разделы

Командная строка и журнал приложения

Командная строка

CLI запускается через python -m duckonet. В окружении должен быть DUCKONET_API_KEY, либо передайте --key-file с закрытым файлом ключа. Значение API-ключа не передаётся отдельным аргументом командной строки.

python -m duckonet --help
python -m duckonet doctor
python -m duckonet profiles list --browser chrome
python -m duckonet request https://example.com/ --browser chrome --version last
python -m duckonet request https://example.com/api -X POST --json '{"name":"sample"}'
python -m duckonet request https://example.com/file --output response.bin

Правила кавычек зависят от оболочки. Не вводите секреты приложения через --json/--data/-H, если они не должны попадать в историю команд; для тела можно использовать --body-file.

Команда / опцияПоведение
request URLОдин запрос; по умолчанию GET, Chrome, version=last, protocol=h2. В stdout идут точные байты тела ответа.
-X, --methodHTTP-метод; CONNECT запрещён.
-H, --headerName: value; допускаются повторяющиеся опции и заголовки. Служебные framing-заголовки определяет библиотека.
--data / --json / --body-fileВзаимоисключающие варианты тела. JSON null остаётся null; файл отправляется потоково.
--timeoutОбщий таймаут, по умолчанию 30 секунд.
--connect-timeout, --read-timeoutОтдельные таймауты; если не заданы, отдельное ограничение фазы не включается. Явные значения >0 и ≤300 секунд.
--body-limitПредел буферизованного ответа: по умолчанию 1048576, от 1 до 67108864 байт.
-o, --outputЗаписать тело в файл. Существующий файл по умолчанию не изменяется.
--overwriteРазрешить атомарную замену --output после успешного получения ответа. При сетевой ошибке старое содержимое сохраняется.
--failКод выхода 22 для HTTP-статуса ≥400; тело ответа при этом всё равно выводится или сохраняется.
--browser, --version, --protocolВыбор браузера, версии и режима. Режимы: h1, h2, h2_only, h3, h3_only.
--state-dirКаталог состояния установки, общий с соответствующим Python-клиентом.
--key-fileЗакрытый файл ключа; его права и отсутствие небезопасных ссылок проверяются существующим механизмом хранения.
profiles listJSON со списком версий выбранного браузера/протокола с учётом совместимости и прав аккаунта. Выполняет обычный запуск клиента.
doctorЛокальный JSON: версия библиотеки, Python, платформа, разрядность и наличие cffi/cryptography. Не делает сетевых запросов и не подтверждает состояние аккаунта, TLS или доступность сайта.

--help не открывает клиент и не запускает сетевую регистрацию. Сообщения об ошибках идут в stderr без исходного текста исключения и секретов. Коды выхода: 0 — успех, 2 — неверные аргументы, 1 — ошибка выполнения, 22 — HTTP-ошибка с --fail, 130 — прерывание. Содержимое целевого ответа является данными вашего приложения и выводится по вашему запросу, даже если оно содержит чувствительные поля.

Журнал приложения

Библиотека не меняет глобальные настройки logging и не подавляет предупреждения процесса. Для журнала завершённых запросов передайте diagnostic_hook. Уровни, обработчики и формат сообщений задаёт приложение обычными средствами Python.

import logging
import os
from duckonet import HttpClient

logger = logging.getLogger('myapp.http')

def log_response(event):
    logger.info('HTTP status=%s protocol=%s attempts=%s',
                event.status_code, event.protocol, event.attempt_count)

with HttpClient(api_key=os.environ['DUCKONET_API_KEY'],
                diagnostic_hook=log_response) as client:
    response = client.get('https://example.com/')

Событие не содержит тела и заголовков. request_info предназначен для отдельной диагностики: пользовательские имена заголовков и путь URL могут содержать данные приложения. Не записывайте его целиком без собственного контроля. Ошибки получения ответа передаются как исключения; hook не заменяет обработку ошибок.

Текст страницы