sendRequest method
Send a POST request to YouTube Music.
Implementation
@override
Future<JsonMap> sendRequest(
String endpoint,
JsonMap body, {
String additionalParams = '',
}) async {
body.addAll(_context);
final fullHeaders = JsonMap.from(await headers);
fullHeaders['Cookie'] = _cookies;
final response = await _session.post(
'$YTM_BASE_API$endpoint$_params$additionalParams',
data: body,
options: Options(headers: fullHeaders, responseType: ResponseType.bytes),
);
final String responseBody;
if ((response.data! as List)[0] == 0x1F &&
(response.data! as List)[1] == 0x8B) {
// decompress gzip
final List<int> decompressed = GZipCodec().decode(
response.data! as List<int>,
);
responseBody = utf8.decode(decompressed);
} else {
// treat as normal UTF-8 text
responseBody = utf8.decode(response.data! as List<int>);
}
response.data = responseBody;
final responseText =
response.data.runtimeType == String
? jsonDecode(response.data as String)
: response.data;
if (response.statusCode != null && response.statusCode! >= 400) {
final message =
'Server returned HTTP ${response.statusCode}: ${response.statusMessage}.\n';
final error = ((responseText as JsonMap)['error'] as JsonMap)['message'];
throw YTMusicServerError('$message$error');
}
return responseText as JsonMap;
}