pretty_http_logger

Dart http 库的中间件日志库。

入门

pretty_http_logger 是一个允许您为 Dart 的 http 包记录请求和响应的模块。

安装

将此库包含在您的包中。

pretty_http_logger: any

导入

import 'package:pretty_http_logger/pretty_http_logger.dart';

使用 pretty_http_logger

通过使用 build 工厂构造函数创建 HttpWithMiddleware 的对象。

build 构造函数接受一个由 pretty_http_logger 预先构建的中间件列表。

(您也可以为 pretty_http_logger 构建自己的中间件。请查看 构建您自己的中间件)
HttpWithMiddleware http = HttpWithMiddleware.build(middlewares: [
    HttpLogger(logLevel: LogLevel.BODY),
]);

就是这样!现在您可以像往常一样使用此 http 对象了。

//Simple POST request
var response = await http.post('https://jsonplaceholder.typicode.com/posts/',
    body: {"testing", "1234"});

//Simple GET request
var response = await http.get('https://jsonplaceholder.typicode.com/posts/');

请求超时

使用 pretty_http_logger,您还可以指定请求的超时时间。所以,如果您希望请求在 30 秒后超时

HttpWithMiddleware http = HttpWithMiddleware.build(
  requestTimeout: Duration(seconds: 30),
  middlewares: [
    HttpLogger(logLevel: LogLevel.BODY),
]);

HttpWithMiddleware 支持 http 提供的所有功能。

http.get(...);
http.post(...);
http.put(...);
http.delete(...);
http.head(...);
http.patch(...);
http.read(...);
http.readBytes(...);

使用客户端

如果您想使用 http.Client 来保持与服务器的连接,请使用 HttpClientWithMiddleware

HttpClientWithMiddleware httpClient = HttpClientWithMiddleware.build(middlewares: [
    HttpLogger(logLevel: LogLevel.BODY),
]);

var response = await httpClient.post('https://jsonplaceholder.typicode.com/posts/',
    body: {"testing", "1234"});

var response = await httpClient.get('https://jsonplaceholder.typicode.com/posts/');

//Don't forget to close the client once done.
httpClient.close();

构建您自己的中间件

使用 pretty_http_logger 构建您自己的中间件非常简单,无论您是想为 pretty_http_logger 创建一个包,还是想仅为您自己的项目构建一个中间件。

一旦拥有必要的导入,您只需要继承 MiddlewareContract 类,它将为您提供对 3 个函数的访问。

interceptRequest(RequestData) 是在发出任何请求之前调用的方法。
interceptResponse(ResponseData) 是在收到请求响应后调用的方法。
interceptError(error) 是在发生异常时调用的方法。

然后,您可以 @override 所有必需的函数来添加中间件。

示例(一个简单的日志记录器,可以记录所有请求中的数据)

class Logger extends MiddlewareContract {
  @override
  void interceptRequest(RequestData data) {
    print("Method: ${data.method}");
    print("Url: ${data.url}");
    print("Body: ${data.body}");
  }

  @override
  void interceptResponse(ResponseData data) {
    print("Status Code: ${data.statusCode}");
    print("Method: ${data.method}");
    print("Url: ${data.url}");
    print("Body: ${data.body}");
    print("Headers: ${data.headers}");
  }
  @override
  void interceptError(err) {
    print("Error: $err");
  }
}

您还可以在发出请求之前修改 RequestData,并在每次收到响应后修改 ResponseData。例如,如果您想在发送之前将数据包装在特定结构中,或者希望每个请求头都将 Content-Type 设置为 application/json

class Logger extends MiddlewareContract {
  @override
  void interceptRequest(RequestData data) {
    //Adding content type to every request
    data.headers["Content-Type"] = "application/json";
    
    data.body = jsonEncode({
      uniqueId: "some unique id",
      data: data.body,
    });
  }

  @override
  void interceptResponse(ResponseData data) {
    //Unwrapping response from a structure
    data.body = jsonDecode(data.body)["data"];
  }
  @override
  void interceptError(err) {
    print("Error: $err");
  }
}

pretty_http_logger 包的灵感来源于

如果您发现 pretty_http_logger 的任何问题或有任何建议,请 打开一个 issue 或提交一个 PR,我将非常乐意看到。

GitHub

https://github.com/mithunadhikari40/pretty_http_logger