{"id":23222674,"url":"https://github.com/codingalecr/http_interceptor","last_synced_at":"2025-05-16T07:03:17.742Z","repository":{"id":34572564,"uuid":"180453020","full_name":"CodingAleCR/http_interceptor","owner":"CodingAleCR","description":"A lightweight, simple plugin that allows you to intercept request and response objects and modify them if desired.","archived":false,"fork":false,"pushed_at":"2024-12-17T17:58:48.000Z","size":366,"stargazers_count":133,"open_issues_count":13,"forks_count":68,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-03T14:08:54.012Z","etag":null,"topics":["dart","dart-library","flutter","http","http-interceptor","http-requests","intercept-calls","interceptors","open-source","plugin","retrying-requests"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CodingAleCR.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["CodingAleCR"]}},"created_at":"2019-04-09T21:36:03.000Z","updated_at":"2025-01-13T14:15:52.000Z","dependencies_parsed_at":"2024-02-02T22:24:46.637Z","dependency_job_id":"98251295-8687-4cc5-8661-58fa0dc79367","html_url":"https://github.com/CodingAleCR/http_interceptor","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodingAleCR%2Fhttp_interceptor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodingAleCR%2Fhttp_interceptor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodingAleCR%2Fhttp_interceptor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CodingAleCR%2Fhttp_interceptor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CodingAleCR","download_url":"https://codeload.github.com/CodingAleCR/http_interceptor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247014522,"owners_count":20869376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","dart-library","flutter","http","http-interceptor","http-requests","intercept-calls","interceptors","open-source","plugin","retrying-requests"],"created_at":"2024-12-18T23:13:48.959Z","updated_at":"2025-05-16T07:03:17.733Z","avatar_url":"https://github.com/CodingAleCR.png","language":"Dart","readme":"# http_interceptor\n\n[![Pub](https://img.shields.io/pub/v/http_interceptor.svg)](https://pub.dev/packages/http_interceptor)\n[![style: lints/recommended](https://img.shields.io/badge/style-effective_dart-40c4ff.svg)](https://github.com/tenhobi/effective_dart)\n[![License: MIT](https://img.shields.io/badge/license-MIT-purple.svg)](https://opensource.org/licenses/MIT)\n[![codecov](https://codecov.io/gh/CodingAleCR/http_interceptor/branch/main/graph/badge.svg?token=hgsnPctaDz)](https://codecov.io/gh/CodingAleCR/http_interceptor)\n[![Star on GitHub](https://img.shields.io/github/stars/codingalecr/http_interceptor.svg?style=flat\u0026logo=github\u0026colorB=deeppink\u0026label=stars)](https://github.com/codingalecr/http_interceptor)\n\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-20-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\nThis is a plugin that lets you intercept the different requests and responses from Dart's http package. You can use to add headers, modify query params, or print a log of the response.\n\n## Quick Reference\n\n**Already using `http_interceptor`? Check out the [1.0.0 migration guide](./guides/migration_guide_1.0.0.md) for quick reference on the changes made and how to migrate your code.**\n\n- [http_interceptor](#http_interceptor)\n  - [Quick Reference](#quick-reference)\n  - [Installation](#installation)\n  - [Features](#features)\n  - [Usage](#usage)\n    - [Building your own interceptor](#building-your-own-interceptor)\n    - [Using your interceptor](#using-your-interceptor)\n      - [Using interceptors with Client](#using-interceptors-with-client)\n      - [Using interceptors without Client](#using-interceptors-without-client)\n    - [Retrying requests](#retrying-requests)\n    - [Using self signed certificates](#using-self-signed-certificates)\n    - [InterceptedClient](#interceptedclient)\n    - [InterceptedHttp](#interceptedhttp)\n  - [Roadmap](#roadmap)\n  - [Troubleshooting](#troubleshooting)\n  - [Contributions](#contributions)\n    - [Contributors](#contributors)\n\n## Installation\n\nInclude the package with the latest version available in your `pubspec.yaml`.\n\n```dart\nhttp_interceptor: \u003clatest\u003e\n```\n\n## Features\n\n- 🚦 Intercept \u0026 change unstreamed requests and responses.\n- ✨ Retrying requests when an error occurs or when the response does not match the desired (useful for handling custom error responses).\n- 👓 `GET` requests with separated parameters.\n- ⚡️ Standard `bodyBytes` on `ResponseData` to encode or decode in the desired format.\n- 🙌🏼 Array parameters on requests.\n- 🖋 Supports self-signed certificates (except on Flutter Web).\n- 🍦 Compatible with vanilla Dart projects or Flutter projects.\n- 🎉 Null-safety.\n- ⏲ Timeout configuration with duration and timeout functions.\n- ⏳ Configure the delay for each retry attempt.\n\n## Usage\n\n```dart\nimport 'package:http_interceptor/http_interceptor.dart';\n```\n\n### Building your own interceptor\n\nIn order to implement `http_interceptor` you need to implement the `InterceptorContract` and create your own interceptor. This abstract class has two methods: `interceptRequest`, which triggers before the http request is called; and `interceptResponse`, which triggers after the request is called, it has a response attached to it which the corresponding to said request. You could use this to do logging, adding headers, error handling, or many other cool stuff. It is important to note that after you proccess the request/response objects you need to return them so that `http` can continue the execute.\n\n`interceptRequest` and `interceptResponse` use `FutureOr` syntax, which makes it easier to support both synchronous and asynchronous behaviors.\n\n- Logging with interceptor:\n\n```dart\nclass LoggerInterceptor extends InterceptorContract {\n  @override\n  BaseRequest interceptRequest({\n    required BaseRequest request,\n  }) {\n    print('----- Request -----');\n    print(request.toString());\n    print(request.headers.toString());\n    return request;\n  }\n\n  @override\n  BaseResponse interceptResponse({\n    required BaseResponse response,\n  }) {\n    log('----- Response -----');\n    log('Code: ${response.statusCode}');\n    if (response is Response) {\n      log((response).body);\n    }\n    return response;\n  }\n}\n```\n\n- Changing headers with interceptor:\n\n```dart\nclass WeatherApiInterceptor implements InterceptorContract {\n  @override\n  FutureOr\u003cBaseRequest\u003e interceptRequest({required BaseRequest request}) async {\n    try {\n      request.url.queryParameters['appid'] = OPEN_WEATHER_API_KEY;\n      request.url.queryParameters['units'] = 'metric';\n      request.headers[HttpHeaders.contentTypeHeader] = \"application/json\";\n    } catch (e) {\n      print(e);\n    }\n    return request;\n  }\n\n  @override\n  BaseResponse interceptResponse({\n  required BaseResponse response,\n  }) =\u003e\n      response;\n}\n```\n\n- You can also react to and modify specific types of requests and responses, such as `StreamedRequest`,`StreamedResponse`, or `MultipartRequest` :\n\n```dart\nclass MultipartRequestInterceptor implements InterceptorContract {\n  @override\n  FutureOr\u003cBaseRequest\u003e interceptRequest({required BaseRequest request}) async {\n    if(request is MultipartRequest){\n      request.fields['app_version'] = await PackageInfo.fromPlatform().version;\n    }\n    return request;\n  }\n\n  @override\n  FutureOr\u003cBaseResponse\u003e interceptResponse({required BaseResponse response}) async {\n    if(response is StreamedResponse){\n      response.stream.asBroadcastStream().listen((data){\n        print(data);\n      });\n    }\n    return response;\n  }\n}\n```\n\n### Using your interceptor\n\nNow that you actually have your interceptor implemented, now you need to use it. There are two general ways in which you can use them: by using the `InterceptedHttp` to do separate connections for different requests or using a `InterceptedClient` for keeping a connection alive while making the different `http` calls. The ideal place to use them is in the service/provider class or the repository class (if you are not using services or providers); if you don't know about the repository pattern you can just google it and you'll know what I'm talking about. 😉\n\n#### Using interceptors with Client\n\nNormally, this approach is taken because of its ability to be tested and mocked.\n\nHere is an example with a repository using the `InterceptedClient` class.\n\n```dart\nclass WeatherRepository {\n  Client client = InterceptedClient.build(interceptors: [\n      WeatherApiInterceptor(),\n  ]);\n\n  Future\u003cMap\u003cString, dynamic\u003e\u003e fetchCityWeather(int id) async {\n    var parsedWeather;\n    try {\n      final response =\n          await client.get(\"$baseUrl/weather\".toUri(), params: {'id': \"$id\"});\n      if (response.statusCode == 200) {\n        parsedWeather = json.decode(response.body);\n      } else {\n        throw Exception(\"Error while fetching. \\n ${response.body}\");\n      }\n    } catch (e) {\n      print(e);\n    }\n    return parsedWeather;\n  }\n\n}\n```\n\n#### Using interceptors without Client\n\nThis is mostly the straight forward approach for a one-and-only call that you might need intercepted.\n\nHere is an example with a repository using the `InterceptedHttp` class.\n\n```dart\nclass WeatherRepository {\n\n    Future\u003cMap\u003cString, dynamic\u003e\u003e fetchCityWeather(int id) async {\n    var parsedWeather;\n    try {\n      final http = InterceptedHttp.build(interceptors: [\n          WeatherApiInterceptor(),\n      ]);\n      final response =\n          await http.get(\"$baseUrl/weather\".toUri(), params: {'id': \"$id\"});\n      if (response.statusCode == 200) {\n        parsedWeather = json.decode(response.body);\n      } else {\n        return Future.error(\n          \"Error while fetching.\",\n          StackTrace.fromString(\"${response.body}\"),\n        );\n      }\n    } on SocketException {\n      return Future.error('No Internet connection 😑');\n    } on FormatException {\n      return Future.error('Bad response format 👎');\n    } on Exception {\n      return Future.error('Unexpected error 😢');\n    }\n\n    return parsedWeather;\n  }\n\n}\n```\n\n### Retrying requests\n\nSometimes you need to retry a request due to different circumstances, an expired token is a really good example. Here's how you could potentially implement an expired token retry policy with `http_interceptor`.\n\n```dart\nclass ExpiredTokenRetryPolicy extends RetryPolicy {\n  @override\n  Future\u003cbool\u003e shouldAttemptRetryOnResponse(BaseResponse response) async {\n    if (response.statusCode == 401) {\n      // Perform your token refresh here.\n\n      return true;\n    }\n\n    return false;\n  }\n}\n```\n\nYou can also set the maximum amount of retry attempts with `maxRetryAttempts` property or override the `shouldAttemptRetryOnException` if you want to retry the request after it failed with an exception.\n\nSometimes it is helpful to have a cool-down phase between multiple requests. This delay could for example also differ between the first and the second retry attempt as shown in the following example.\n\n```dart\nclass ExpiredTokenRetryPolicy extends RetryPolicy {\n  @override\n  Duration delayRetryAttemptOnResponse({required int retryAttempt}) {\n    return const Duration(milliseconds: 250) * math.pow(2.0, retryAttempt);\n  }\n}\n```\n\n### Using self signed certificates\n\nYou can achieve support for self-signed certificates by providing `InterceptedHttp` or `InterceptedClient` with the `client` parameter when using the `build` method on either of those, it should look something like this:\n\n### InterceptedClient\n\n```dart\nClient client = InterceptedClient.build(\n  interceptors: [\n    WeatherApiInterceptor(),\n  ],\n  client: IOClient(\n    HttpClient()\n      ..badCertificateCallback = badCertificateCallback\n      ..findProxy = findProxy,\n  );\n);\n```\n\n### InterceptedHttp\n\n```dart\nfinal http = InterceptedHttp.build(\n  interceptors: [\n    WeatherApiInterceptor(),\n  ],\n  client: IOClient(\n    HttpClient()\n      ..badCertificateCallback = badCertificateCallback\n      ..findProxy = findProxy,\n  );\n);\n```\n\n_**Note:** It is important to know that since both HttpClient and IOClient are part of `dart:io` package, this will not be a feature that you can perform on Flutter Web (due to `BrowserClient` and browser limitations)._\n\n## Roadmap\n\nCheck out our roadmap [here](https://doc.clickup.com/p/h/82gtq-119/f552a826792c049).\n\n_We migrated our roadmap to better suit the needs for development since we use ClickUp as our task management tool._\n\n## Troubleshooting\n\nOpen an issue and tell me, I will be happy to help you out as soon as I can.\n\n## Contributions\n\nContributions are always welcomed and encouraged, we will always give you credit for your work on this section. If you are interested in maintaining the project on a regular basis drop me a line at [me@codingale.dev](mailto:me@codingale.dev).\n\n### Contributors\n\nThanks to all the wonderful people contributing to improve this package. Check the [Emoji Key](https://github.com/kentcdodds/all-contributors#emoji-key) for reference on what means what!\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://codingale.dev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12262852?v=3?s=100\" width=\"100px;\" alt=\"Alejandro Ulate Fallas\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlejandro Ulate Fallas\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=codingalecr\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=codingalecr\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=codingalecr\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"#ideas-codingalecr\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#maintenance-codingalecr\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://softmaestri.com/en/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4113558?v=4?s=100\" width=\"100px;\" alt=\"Konstantin Serov\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKonstantin Serov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-caseyryan\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Virus1908\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4580305?v=4?s=100\" width=\"100px;\" alt=\"Virus1908\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVirus1908\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-Virus1908\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=Virus1908\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=Virus1908\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/AsynchronySuperWes\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/13644053?v=4?s=100\" width=\"100px;\" alt=\"Wes Ehrlichman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWes Ehrlichman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-AsynchronySuperWes\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=AsynchronySuperWes\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=AsynchronySuperWes\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jlubeck\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3067603?v=4?s=100\" width=\"100px;\" alt=\"Jan Lübeck\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJan Lübeck\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-jlubeck\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=jlubeck\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=jlubeck\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/lucalves\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/17712401?v=4?s=100\" width=\"100px;\" alt=\"Lucas Alves\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLucas Alves\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-lucalves\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=lucalves\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=lucalves\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/stewemetal\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5860632?v=4?s=100\" width=\"100px;\" alt=\"István Juhos\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIstván Juhos\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-stewemetal\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=stewemetal\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=stewemetal\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/shyndman\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/42326?v=4?s=100\" width=\"100px;\" alt=\"Scott Hyndman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eScott Hyndman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-shyndman\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/II11II\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/45257709?v=4?s=100\" width=\"100px;\" alt=\"Islam Akhrarov\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIslam Akhrarov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-II11II\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=II11II\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=II11II\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/meysammahfouzi\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/14848008?v=4?s=100\" width=\"100px;\" alt=\"Meysam\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMeysam\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=meysammahfouzi\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Mawi137\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5464100?v=4?s=100\" width=\"100px;\" alt=\"Martijn\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMartijn\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=Mawi137\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=Mawi137\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/MaciejZuk\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/78476165?v=4?s=100\" width=\"100px;\" alt=\"MaciejZuk\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMaciejZuk\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/issues?q=author%3AMaciejZuk\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/lukaskurz\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22956519?v=4?s=100\" width=\"100px;\" alt=\"Lukas Kurz\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLukas Kurz\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=lukaskurz\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"#ideas-lukaskurz\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=lukaskurz\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/vixez\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3032294?v=4?s=100\" width=\"100px;\" alt=\"Glenn Ruysschaert\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGlenn Ruysschaert\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=vixez\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=vixez\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dexcell\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/41800?v=4?s=100\" width=\"100px;\" alt=\"Erick\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eErick\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=dexcell\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=dexcell\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/javiermrz\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/46677628?v=4?s=100\" width=\"100px;\" alt=\"javiermrz\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ejaviermrz\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=javiermrz\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ntimesc\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5063898?v=4?s=100\" width=\"100px;\" alt=\"nihar\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003enihar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-ntimesc\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ayyysh04\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/74104690?v=4?s=100\" width=\"100px;\" alt=\"Ayush Yadav\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAyush Yadav\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-ayyysh04\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/shittyday\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/88209828?v=4?s=100\" width=\"100px;\" alt=\"Alex\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlex\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=shittyday\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/iruizr7\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/65398602?v=4?s=100\" width=\"100px;\" alt=\"Iñigo R.\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIñigo R.\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/CodingAleCR/http_interceptor/commits?author=iruizr7\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n","funding_links":["https://github.com/sponsors/CodingAleCR"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingalecr%2Fhttp_interceptor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodingalecr%2Fhttp_interceptor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingalecr%2Fhttp_interceptor/lists"}