mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-07-13 05:16:43 +02:00
Fix bug from previous commit
This commit is contained in:
@ -511,73 +511,70 @@ HttpClient createHttpClient(bool insecure) {
|
||||
}
|
||||
|
||||
Future<MapEntry<HttpClient, HttpClientResponse>> sourceRequestStreamResponse(
|
||||
String method,
|
||||
String url,
|
||||
Map<String, String>? requestHeaders,
|
||||
Map<String, dynamic> additionalSettings,
|
||||
{bool followRedirects = true,
|
||||
Object? postBody}) async {
|
||||
var currentUrl = Uri.parse(url);
|
||||
var redirectCount = 0;
|
||||
const maxRedirects = 10;
|
||||
List<Cookie> cookies = [];
|
||||
while (redirectCount < maxRedirects) {
|
||||
var httpClient =
|
||||
createHttpClient(additionalSettings['allowInsecure'] == true);
|
||||
var request = await httpClient.openUrl(method, currentUrl);
|
||||
if (requestHeaders != null) {
|
||||
requestHeaders.forEach((key, value) {
|
||||
request.headers.set(key, value);
|
||||
});
|
||||
}
|
||||
request.cookies.addAll(cookies);
|
||||
request.followRedirects = false;
|
||||
if (postBody != null) {
|
||||
request.headers.contentType = ContentType.json;
|
||||
request.write(jsonEncode(postBody));
|
||||
}
|
||||
final response = await request.close();
|
||||
|
||||
if (followRedirects &&
|
||||
(response.statusCode >= 300 && response.statusCode <= 399)) {
|
||||
final location = response.headers.value(HttpHeaders.locationHeader);
|
||||
if (location != null) {
|
||||
currentUrl = Uri.parse(ensureAbsoluteUrl(location, currentUrl));
|
||||
redirectCount++;
|
||||
cookies = response.cookies;
|
||||
httpClient.close();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return MapEntry(httpClient, response);
|
||||
String method,
|
||||
String url,
|
||||
Map<String, String>? requestHeaders,
|
||||
Map<String, dynamic> additionalSettings,
|
||||
{bool followRedirects = true,
|
||||
Object? postBody}) async {
|
||||
var currentUrl = Uri.parse(url);
|
||||
var redirectCount = 0;
|
||||
const maxRedirects = 10;
|
||||
List<Cookie> cookies = [];
|
||||
while (redirectCount < maxRedirects) {
|
||||
var httpClient =
|
||||
createHttpClient(additionalSettings['allowInsecure'] == true);
|
||||
var request = await httpClient.openUrl(method, currentUrl);
|
||||
if (requestHeaders != null) {
|
||||
requestHeaders.forEach((key, value) {
|
||||
request.headers.set(key, value);
|
||||
});
|
||||
}
|
||||
throw ObtainiumError('Too many redirects ($maxRedirects)');
|
||||
request.cookies.addAll(cookies);
|
||||
request.followRedirects = false;
|
||||
if (postBody != null) {
|
||||
request.headers.contentType = ContentType.json;
|
||||
request.write(jsonEncode(postBody));
|
||||
}
|
||||
final response = await request.close();
|
||||
|
||||
if (followRedirects &&
|
||||
(response.statusCode >= 300 && response.statusCode <= 399)) {
|
||||
final location = response.headers.value(HttpHeaders.locationHeader);
|
||||
if (location != null) {
|
||||
currentUrl = Uri.parse(ensureAbsoluteUrl(location, currentUrl));
|
||||
redirectCount++;
|
||||
cookies = response.cookies;
|
||||
httpClient.close();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return MapEntry(httpClient, response);
|
||||
}
|
||||
throw ObtainiumError('Too many redirects ($maxRedirects)');
|
||||
}
|
||||
|
||||
Future<Response> httpClientResponseStreamToFinalResponse(
|
||||
HttpClient httpClient,
|
||||
String method,
|
||||
String url,
|
||||
HttpClientResponse response) async {
|
||||
final bytes =
|
||||
(await response.fold<BytesBuilder>(BytesBuilder(), (b, d) => b..add(d)))
|
||||
.toBytes();
|
||||
Future<Response> httpClientResponseStreamToFinalResponse(HttpClient httpClient,
|
||||
String method, String url, HttpClientResponse response) async {
|
||||
final bytes =
|
||||
(await response.fold<BytesBuilder>(BytesBuilder(), (b, d) => b..add(d)))
|
||||
.toBytes();
|
||||
|
||||
final headers = <String, String>{};
|
||||
response.headers.forEach((name, values) {
|
||||
headers[name] = values.join(', ');
|
||||
});
|
||||
final headers = <String, String>{};
|
||||
response.headers.forEach((name, values) {
|
||||
headers[name] = values.join(', ');
|
||||
});
|
||||
|
||||
httpClient.close();
|
||||
httpClient.close();
|
||||
|
||||
return http.Response.bytes(
|
||||
bytes,
|
||||
response.statusCode,
|
||||
headers: headers,
|
||||
request: http.Request(method, Uri.parse(url)),
|
||||
);
|
||||
}
|
||||
return http.Response.bytes(
|
||||
bytes,
|
||||
response.statusCode,
|
||||
headers: headers,
|
||||
request: http.Request(method, Uri.parse(url)),
|
||||
);
|
||||
}
|
||||
|
||||
abstract class AppSource {
|
||||
List<String> hosts = [];
|
||||
@ -639,7 +636,8 @@ abstract class AppSource {
|
||||
var method = postBody == null ? 'GET' : 'POST';
|
||||
var requestHeaders = await getRequestHeaders(additionalSettings);
|
||||
var streamedResponseAndClient = await sourceRequestStreamResponse(
|
||||
method, url, requestHeaders, additionalSettings, followRedirects: followRedirects);
|
||||
method, url, requestHeaders, additionalSettings,
|
||||
followRedirects: followRedirects, postBody: postBody);
|
||||
return await httpClientResponseStreamToFinalResponse(
|
||||
streamedResponseAndClient.key,
|
||||
method,
|
||||
|
Reference in New Issue
Block a user