dio_debugger 0.1.0
dio_debugger: ^0.1.0 copied to clipboard
Lightweight utility to attach a reverse/forward proxy to an existing Dio instance for local debugging.
dio_debugger #
Независимый утилитный пакет, который патчит переданный Dio
и подключает reverse‑proxy интерсептор. Удобно для локальной отладки, перехвата трафика и обхода CORS/сертификатов через ваш локальный прокси.
Возможности #
- Подключение одной строчкой:
DioDebugger.attach(dio)
- Источники настроек (приоритет):
- Аргументы
attach
--dart-define
(UPSTREAM_BASE_URL
,PROXY_BASE_URL
,PROXY_HTTP_PATH
,DIO_DEBUGGER_ENABLED
/HTTP_PROXY_ENABLED
)- OS ENV (через условный импорт; web-safe)
- Аргументы
- Обработка абсолютных URL в
RequestOptions.path
— еслиpath
ужеhttp(s)://…
, проксируется как есть. - Порядок интерсепторов:
insertFirst
(по умолчаниюtrue
) — ставит интерсептор первым. - Исключения/фильтры:
skip*/allow*
по путям/хостам/методам.
Установка #
Добавьте зависимость в ваш pubspec.yaml
:
dependencies:
dio: ^5.4.0
dio_debugger:
path: ../packages/dio_debugger
Быстрый старт #
import 'package:dio/dio.dart';
import 'package:dio_debugger/dio_debugger.dart';
final dio = Dio(BaseOptions(baseUrl: 'https://41098f05e20d.ngrok-free.app'));
// Явное подключение с параметрами прокси
DioDebugger.attach(
dio,
upstreamBaseUrl: 'https://41098f05e20d.ngrok-free.app',
proxyBaseUrl: 'http://localhost:9091',
proxyHttpPath: '/httpproxy',
);
Расширенные опции #
DioDebugger.attach(
dio,
insertFirst: true, // поставить интерсептор первым
enabled: null, // если null — берётся из env: DIO_DEBUGGER_ENABLED/HTTP_PROXY_ENABLED (true|1|yes|on)
skipPaths: ["/metrics"], // не проксировать эти пути
skipHosts: ["auth.local"],
skipMethods: ["OPTIONS"],
allowPaths: null, // если задан allow*, то проксируются только совпадающие
allowHosts: null,
allowMethods: null,
upstreamBaseUrl: 'https://41098f05e20d.ngrok-free.app',
proxyBaseUrl: 'http://localhost:9091',
proxyHttpPath: '/httpproxy',
);
Примеры конфигурации #
- Через
--dart-define
:
--dart-define=UPSTREAM_BASE_URL=https://dev.api.padelme.app \
--dart-define=PROXY_BASE_URL=http://localhost:9091 \
--dart-define=PROXY_HTTP_PATH=/httpproxy \
--dart-define=DIO_DEBUGGER_ENABLED=true
- Через OS ENV (на платформах с
dart:io
):
UPSTREAM_BASE_URL=https://dev.api.padelme.app
PROXY_BASE_URL=http://localhost:9091
PROXY_HTTP_PATH=/httpproxy
DIO_DEBUGGER_ENABLED=true
После подключения запрос GET /path
пойдёт на:
http://localhost:9091/httpproxy?_target=https://dev.api.padelme.app/path
Если options.path
уже абсолютный http(s)://…
, он проксируется без склейки с upstreamBaseUrl
.
Заметки #
- На стороне прокси должен существовать endpoint
/httpproxy
, который принимает query_target
и форвардит запрос дальше. - Если
upstreamBaseUrl
илиproxyBaseUrl
пустые, пакет ничего не меняет (безопасно для прод). - Если прокси указан без схемы и с портом
:443
, автоматически будет использованhttps
.
Лицензия #
MIT