Retrieving the response body from an HttpClientResponse

前端 未结 2 1125
时光说笑
时光说笑 2021-01-04 11:53

I\'m trying to write some tests for my Dart server application, and I\'ve been using the HttpClient class (along with the related HttpClientRequest and HttpClientResponse cl

相关标签:
2条回答
  • 2021-01-04 12:17

    The HttpClientResponse object is a Stream, so you can just read it with the listen() method:

    response.listen((List<int> data) {
      //data as bytes
    });
    

    You can also use the codecs from dart:convert to parse the data. The following example reads the response contents to a String:

    import 'dart:io';
    import 'dart:convert';
    import 'dart:async';
    
    Future<String> readResponse(HttpClientResponse response) {
      final completer = Completer<String>();
      final contents = StringBuffer();
      response.transform(utf8.decoder).listen((data) {
        contents.write(data);
      }, onDone: () => completer.complete(contents.toString()));
      return completer.future;
    }
    
    0 讨论(0)
  • 2021-01-04 12:31

    Low level

    Here is the await for version of collecting the response stream. It's a little more compact than using a completer.

    Future<String> readResponse(HttpClientResponse response) async {
      final contents = StringBuffer();
      await for (var data in response.transform(utf8.decoder)) {
        contents.write(data);
      }
      return contents.toString();
    }
    

    You should wrap it in a try catch block to handle errors.

    High level

    Most of the time from the client side you would use the http library instead:

    // import 'package:http/http.dart';
    
    Response response = await get(url);
    String content = response.body;
    

    See this article for more details.

    0 讨论(0)
提交回复
热议问题