send method
Sends an HTTP request and asynchronously returns the response.
Implementers should call BaseRequest.finalize to get the body of the
request as a ByteStream. They shouldn't make any assumptions about the
state of the stream; it could have data written to it asynchronously at a
later point, or it could already be closed when it's returned. Any
internal HTTP errors should be wrapped as ClientExceptions.
Implementation
@override
Future<StreamedResponse> send(BaseRequest request) async {
if (dryRun) DryRunClient.ensureReadOnly(request);
final bytes = await request.finalize().toBytes();
final recorded = RecordedRequest(
method: request.method,
url: request.url,
headers: Map.of(request.headers),
body: utf8.decode(bytes, allowMalformed: true),
);
_requests.add(recorded);
final stub = _stubs[recorded.summary];
if (stub == null) {
throw StateError('FakeHttp: no stub for ${recorded.summary}');
}
return StreamedResponse(
Stream.value(utf8.encode(stub.body)),
stub.status,
headers: stub.headers,
request: request,
);
}