ajanuw_http 0.1.1 copy "ajanuw_http: ^0.1.1" to clipboard
ajanuw_http: ^0.1.1 copied to clipboard

outdated

http interceptor in dart

A http interceptor in dart #

Install #

dependencies:
  ajanuw_http:

Get #

import 'package:ajanuw_http/ajanuw_http.dart';

void main() async {
  AjanuwHttp.basePath = 'http://localhost:3000';
  var r = await '/'.get(
    params: {'name': 'ajanuw'},
  );
  print(r.body);
}

Post #

import 'package:ajanuw_http/ajanuw_http.dart';

void main() async {
  AjanuwHttp.basePath = 'http://localhost:3000';
  var r = await '/'.post(
    params: {'name': 'ajanuw'},
    body: {'data': '111'},
  );
  print(r.body);
}

send file #

import 'dart:io';

import 'package:ajanuw_http/ajanuw_http.dart';
import 'package:http/http.dart' show MultipartFile;
import 'package:http_parser/http_parser.dart' show MediaType;

void main() async {
  AjanuwHttp.basePath = 'http://localhost:3000';
  var r = await '/upload'.postFile(
    params: {'name': 'ajanuw'},
    body: {'data': '111'},
    files: [
      await MultipartFile.fromPath('file', './a.jpg'),

      MultipartFile.fromBytes(
        'file',
        await File('./a.jpg').readAsBytes(),
        contentType: MediaType('image', 'jpeg'),
        filename: 'a.jpg',
      ),

      MultipartFile.fromBytes(
        'file',
        await 'https://i.loli.net/2019/10/01/CVBu2tNMqzOfXHr.png'.readBytes(),
        contentType: MediaType('image', 'png'),
        filename: 'CVBu2tNMqzOfXHr.png',
      ),
    ],
  );
  print(r.body);
}

Use interceptor #

import 'package:ajanuw_http/ajanuw_http.dart';
import 'package:http/src/base_request.dart';
import 'package:http/src/base_response.dart';
import 'package:http/src/request.dart';
import 'package:http/src/response.dart';

void main() async {
  AjanuwHttp.basePath = 'http://localhost:3000';
  AjanuwHttp.interceptors.add(HeaderInterceptor());
  var r = await '/'.get(
    params: {'name': 'ajanuw'},
  );
  print(r.body);
}

class HeaderInterceptor extends AjanuwHttpInterceptors {
  @override
  Future<Request> request(BaseRequest request) async {
    request.headers['X-myname'] = 'ajanuw';
    return request;
  }

  @override
  Future<Response> response(BaseResponse response) async {
    return response;
  }
}

Use rxdart for error retry #

import 'package:rxdart/rxdart.dart';
import 'package:ajanuw_http/ajanuw_http.dart';

void main() async {
  AjanuwHttp.basePath = 'http://localhost:3000';

  Rx.retry(() {
    return Stream.fromFuture('/'.get()).map((r) {
      print(r.statusCode);
      if (r.statusCode != 200) {
        throw Stream.error('send a err');
      }
      return r;
    });
  }, 3)
      .listen(
    (r) {
      print(r.body);
    },
    onError: (er) {
      // If all three fail
      print('Error: $er');
    },
  );
}

If you execute the above example, you may see the following result:

λ dart ./example/ajanuw_http_example.dart
403
403
200
Hello World!

test #

> pub run test
> pub run test .\test\ajanuw_http_test.dart