basic_http_interceptor 0.1.2 copy "basic_http_interceptor: ^0.1.2" to clipboard
basic_http_interceptor: ^0.1.2 copied to clipboard

HTTP Interceptors for Beginners, Logging, Headers, Proxies, and Hooks.

basic http interceptor for beginners.

Features #

  • http logger interceptor
  • http header interceptor
  • http request/response hook
  • http proxy

Getting started #

    dart pub add basic_http_interceptor

Usage #

  final logger = Logger('main');

  final List<InterceptorContract> interceptors = [
    // logBody = true, or exist header X-Debug-Body, output body
    InterceptorLogger(logger, true),
  ];

  final interClient = interceptedClient(
    interceptors: interceptors,
  );

  // https://www.google.com/search?q=hello+world
  final url = buildUrlString(
    'https://www.google.com',
    {'q': 'hello world'},
  );

  interClient.get(url.toUri()).then((Response response) {
    logger.info('--- response ---');
    logger.info(response.request?.method);
    logger.info(response.request?.url.toString());
    logger.info(response.statusCode);
    // logger.info(response.headers.toString());
    // logger.info(response.body.toString());
  });

Additional information #

  • http header interceptor
  final jwt = '';
  final requestHeader = {
    'Authorization': 'Bearer $jwt',
  };

  final List<InterceptorContract> interceptors = [
    InterceptorHeader(requestHeader: requestHeader),
  ];

  final interClient = interceptedClient(
    interceptors: interceptors,
  );
  • http proxy
  final List<InterceptorContract> interceptors = [
  ];
  
  final proxy = {
    'no_proxy': 'localhost,127.0.0.1,::1',
    'https_proxy': 'https://127.0.0.1:7890/',
    'http_proxy': 'http://127.0.0.1:7890/',
    'all_proxy': 'socks5://127.0.0.1:7891/',
  };

  final interClient = interceptedClient(
    interceptors: interceptors,
    proxy:proxy,
  );
  • http hook

  BaseRequest requestHandle(BaseRequest request ){
    // handle http headers
    final header = request.headers;
    header.addAll({
        'appkey': '',
        'appid': '',
    });

    // handle url param
    final url = request.url;
    url.addParameters({
        'timestamp': DateTime.now().microsecondsSinceEpoch,
    });

    final req = request.copyWith(
        headers:header,
        url:url,
    );

    return req;
  }

  BaseResponse responseHandle(BaseResponse response ){
    return response;
  }

  final interceptorHook = InterceptorHook(
    requestHook:requestHandle,
    responseHook:responseHandle,
  );
  final List<InterceptorContract> interceptors = [
    interceptorHook,
  ];
  
  final interClient = interceptedClient(
    interceptors: interceptors,
  );

Advanced usage #

MethodSwitchingClient is useful when different requests should use different HTTP channels at runtime.

You can extend this class and override send() to route each request according to your business rules. This is a practical approach for AI requests, file uploads, streamed requests, or any call that should bypass interceptors.

In the example below:

  • normal requests go through the interceptor client;
  • streamed requests and upload endpoints go through the default client.
import 'dart:io';

import 'package:basic_http_interceptor/basic_http_interceptor.dart';
import 'package:http/io_client.dart';
import 'package:http_interceptor/http_interceptor.dart';
import 'package:logging/logging.dart';

class AiRoutingClient extends MethodSwitchingClient {
  AiRoutingClient(super.intercepted, super.defaulted);

  @override
  Future<StreamedResponse> send(BaseRequest request) {
    final isUpload = request.url.path.contains('/upload');
    final shouldBypassInterceptors =
        request is StreamedRequest || isUpload;

    if (shouldBypassInterceptors) {
      return defaultClient.send(request);
    }

    return interceptedClient.send(request);
  }
}

final logger = Logger('google-ai');

final proxy = {
  'no_proxy': 'localhost,127.0.0.1,::1',
  'https_proxy': 'https://127.0.0.1:7890/',
  'http_proxy': 'http://127.0.0.1:7890/',
  'all_proxy': 'socks5://127.0.0.1:7891/',
};

final httpClient = interceptedClient(
  proxy: proxy,
  interceptors: [
    InterceptorLogger(logger, true),
  ],
);

final defaultClient = IOClient(
  HttpClient()
    ..findProxy = (url) =>
        HttpClient.findProxyFromEnvironment(url, environment: proxy),
);

final aiClient = AiRoutingClient(httpClient, defaultClient);
0
likes
0
points
388
downloads

Publisher

verified publisheriche2.com

Weekly Downloads

HTTP Interceptors for Beginners, Logging, Headers, Proxies, and Hooks.

Repository (GitHub)
View/report issues

Topics

#http #interceptor

License

unknown (license)

Dependencies

http, http_interceptor, logging

More

Packages that depend on basic_http_interceptor