Files
apidash/packages/better_networking/lib/utils/http_response_utils.dart

70 lines
1.9 KiB
Dart

import 'dart:convert';
import 'dart:typed_data';
import 'package:http/http.dart' as http;
import 'package:http_parser/http_parser.dart';
import 'package:xml/xml.dart';
import '../consts.dart';
String? formatBody(String? body, MediaType? mediaType) {
if (mediaType != null && body != null) {
var subtype = mediaType.subtype;
try {
if (subtype.contains(kSubTypeJson)) {
final tmp = jsonDecode(body);
String result = kJsonEncoder.convert(tmp);
return result;
}
if (subtype.contains(kSubTypeXml)) {
final document = XmlDocument.parse(body);
String result = document.toXmlString(pretty: true, indent: ' ');
return result;
}
if (subtype == kSubTypeHtml) {
var len = body.length;
var lines = kSplitter.convert(body);
var numOfLines = lines.length;
if (numOfLines != 0 && len / numOfLines <= kCodeCharsPerLineLimit) {
return body;
}
}
} catch (e) {
return null;
}
}
return null;
}
Future<http.Response> convertStreamedResponse(
http.StreamedResponse streamedResponse,
) async {
Uint8List bodyBytes = await streamedResponse.stream.toBytes();
http.Response response = http.Response.bytes(
bodyBytes,
streamedResponse.statusCode,
headers: streamedResponse.headers,
persistentConnection: streamedResponse.persistentConnection,
reasonPhrase: streamedResponse.reasonPhrase,
request: streamedResponse.request,
);
return response;
}
Stream<String?> streamTextResponse(
http.StreamedResponse streamedResponse,
) async* {
try {
if (streamedResponse.statusCode != 200) {
final errorText = await streamedResponse.stream.bytesToString();
throw Exception('${streamedResponse.statusCode}\n$errorText');
}
final utf8Stream = streamedResponse.stream.transform(utf8.decoder);
await for (final chunk in utf8Stream) {
yield chunk;
}
} catch (e) {
rethrow;
}
}