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(https://github.com/mithunadhikari40/pretty_http_logger) : 简单的请求和响应日志记录。pretty_http_logger的灵感来源于http_logger(https://github.com/gurleensethi/http_logger)pretty_http_logger的灵感来源于http_middleware(https://github.com/TEDConsulting/http_middleware)pretty_http_logger的灵感来源于pretty_dio_logger(https://github.com/Milad-Akarie/pretty_dio_logger)pretty_http_logger是上述包的结合体,使用了这些库提供的代码,并保持一切都是最新的。
如果您发现 pretty_http_logger 的任何问题或有任何建议,请 打开一个 issue 或提交一个 PR,我将非常乐意看到。