mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-30 21:13:28 +01: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