gpt4 book ai didi

dart - 从 HttpClientResponse 检索响应正文

转载 作者:行者123 更新时间:2023-12-02 11:53:57 24 4
gpt4 key购买 nike

我正在尝试为我的 Dart 服务器应用程序编写一些测试,并且我一直在使用 HttpClient 类(以及相关的 HttpClientRequest 和 HttpClientResponse 类来向服务器发出测试请求(请注意,我正在使用这些类,因为我需要 dart:io 包来运行服务器,所以我不能导入 dart:html)。到目前为止,一切进展顺利,我已经能够编写测试来检查服务器是否正常使用正确的 HTTP 状态代码返回响应。我用来进行这些测试调用的代码的基础如下:

Future<HttpClientResponse> makeServerRequest(String method, Uri uri, [String jsonData]) async {
HttpClient client = new HttpClient();
HttpClientRequest request = await client.openUrl(method, uri);
request.write(jsonData);
return request.close();
}

现在我需要编写一个测试来确保响应正文(而不仅仅是状态代码)是正确的。问题是我似乎找不到任何允许我实际访问 HttpClient* 类中的响应正文的内容。到目前为止我能找到的最接近的是 HttpClientResponse.contentLength属性,但这仅告诉我响应正文有多大,而不是实际内容。

如何从这些请求中检索响应正文?或者,如果您无法这样做,是否有其他方法可以在服务器端应用程序上发出请求,以便我可以读取响应?

最佳答案

HttpClientResponse 对象是一个 Stream,因此您可以使用 listen() 方法读取它:

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

您还可以使用 dart:convert 中的编解码器来解析数据。以下示例读取字符串的响应内容:

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;
}

关于dart - 从 HttpClientResponse 检索响应正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com