send method
- BaseRequest request
override
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 {
final intercept = interceptor.interceptUrl(
request.method,
request.url,
headers: request.headers,
);
if (intercept != null) {
return StreamedResponse(
Stream.value(intercept.bodyBytes),
intercept.statusCode,
headers: {
'Content-Type':
'application/text; charset=${intercept.encoding.name}',
...intercept.headers,
},
);
}
final urlPath = request.url.pathSegments.join('_');
final filename = '${request.method}-$urlPath ${request.url.query}';
final fullFilename = '${filename.trim()}.json';
final file = File('test_recordings/_all/$fullFilename');
if (isUpdatingRecordings) {
final streamedResponse = await sourceClient.send(request);
await _writeResponse(await Response.fromStream(streamedResponse), file);
}
if (!(await file.exists())) {
throw RecordingNotFoundException(request, file.path);
}
return await _readResponse(file);
}