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