【问题标题】:How to log http requests in flutter如何在flutter中记录http请求
【发布时间】:2019-03-09 22:09:41
【问题描述】:

我正在开发一个带有颤振的应用程序,并且我在 dart 中使用默认的 http 包进行 API 调用。我们如何记录所有正在通过的 http 请求。 http 或中间件中是否有任何内置功能可用于相同的功能?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    似乎没有内置的方式来记录请求。但是,您可以实现自己的Client 来记录请求:

    class MyClient extends BaseClient {
      MyClient(this.delegate);
      final Client delegate;
      Future<StreamedResponse> send(BaseRequest request) {
        _logRequest(request);
        return delegate.send(request);
      }
      void close() => delegate.close();
      void _logRequest(BaseRequest request) => ....;
    }
    

    【讨论】:

      【解决方案2】:

      按原样调试解决方案

      class LoggableHttpClient extends BaseClient {
        final Client _delegate;
        final Logger _logger;
      
        LoggableHttpClient(this._delegate, this._logger);
      
        @override
        void close() {
          _delegate.close();
        }
      
        @override
        Future<StreamedResponse> send(BaseRequest request) async {
          String s = "${request.method} ${request.url} -->";
          s += "\nheader: ${request.headers}";
          if(request is Request && request.body.length>0) {
            s += "\nbody: ${request.body}";
          }
          _logger.info(s);
          final response =  await _delegate.send(request);
          s = "${request.method} ${request.url} <--";
          s += "\nheader: ${response.headers}";
      
          // Simple request
          if(request is Request) {
            final List<int> bytes = await response.stream.toBytes();
            s += "\nbody: ${await utf8.decode(bytes)}";
            _logger.info(s);
      
            return StreamedResponse(
                ByteStream.fromBytes(bytes),
                response.statusCode,
                contentLength: response.contentLength,
                request: request,
                headers: response.headers,
                isRedirect: response.isRedirect,
                persistentConnection: response.persistentConnection,
                reasonPhrase: response.reasonPhrase
            );
          }
      
          _logger.info(s);
      
          return response;
        }
      }
      
      

      【讨论】:

        【解决方案3】:

        您可以使用 http_logger 像这样将它们添加到您的 pubspec.yaml

          http: ^0.11.3+16
          http_middleware: ^1.0.0
          http_logger: ^1.0.0
        

        请注意:http_logger 1.0.0 仅适用于 http 0.11.3+16。 (2020 年 2 月 4 日更新)。

        然后像这样将它们导入到文件中:

        import 'package:http_middleware/http_middleware.dart';
        import 'package:http_logger/http_logger.dart';
        import 'package:http/http.dart' as http;
        

        并使用它们:

        HttpWithMiddleware httpClient = HttpWithMiddleware.build(middlewares: [
              HttpLogger(logLevel: LogLevel.BODY),
            ]);
            final http.Response response = await httpClient.post(
              "https:nhatvm.com/v1/user/login",
              headers: <String, String>{
                'Content-Type': 'application/json; charset=UTF-8',
              },
              body: jsonEncode(<String, String>{'email': email, 'password': password}),
            );
        

        【讨论】:

          【解决方案4】:

          您可以像这样将用户 pretty_http_logger 添加到您的 pubspec.YAML 中

            pretty_http_logger: ^0.2.1
          

          并像这样使用它:

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

          就是这样!现在继续像往常一样使用这个 http 对象。

          简单的 POST 请求

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

          简单的 GET 请求

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

          它将以易于阅读且美观的适当格式打印出所有标头、请求正文、响应和错误。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-13
            • 2020-11-29
            • 2019-04-09
            • 2013-02-11
            相关资源
            最近更新 更多