mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 13:33: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( | Future<MapEntry<HttpClient, HttpClientResponse>> sourceRequestStreamResponse( | ||||||
|       String method, |     String method, | ||||||
|       String url, |     String url, | ||||||
|       Map<String, String>? requestHeaders, |     Map<String, String>? requestHeaders, | ||||||
|       Map<String, dynamic> additionalSettings, |     Map<String, dynamic> additionalSettings, | ||||||
|       {bool followRedirects = true, |     {bool followRedirects = true, | ||||||
|       Object? postBody}) async { |     Object? postBody}) async { | ||||||
|     var currentUrl = Uri.parse(url); |   var currentUrl = Uri.parse(url); | ||||||
|     var redirectCount = 0; |   var redirectCount = 0; | ||||||
|     const maxRedirects = 10; |   const maxRedirects = 10; | ||||||
|     List<Cookie> cookies = []; |   List<Cookie> cookies = []; | ||||||
|     while (redirectCount < maxRedirects) { |   while (redirectCount < maxRedirects) { | ||||||
|       var httpClient = |     var httpClient = | ||||||
|           createHttpClient(additionalSettings['allowInsecure'] == true); |         createHttpClient(additionalSettings['allowInsecure'] == true); | ||||||
|       var request = await httpClient.openUrl(method, currentUrl); |     var request = await httpClient.openUrl(method, currentUrl); | ||||||
|       if (requestHeaders != null) { |     if (requestHeaders != null) { | ||||||
|         requestHeaders.forEach((key, value) { |       requestHeaders.forEach((key, value) { | ||||||
|           request.headers.set(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); |  | ||||||
|     } |     } | ||||||
|     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( | Future<Response> httpClientResponseStreamToFinalResponse(HttpClient httpClient, | ||||||
|       HttpClient httpClient, |     String method, String url, HttpClientResponse response) async { | ||||||
|       String method, |   final bytes = | ||||||
|       String url, |       (await response.fold<BytesBuilder>(BytesBuilder(), (b, d) => b..add(d))) | ||||||
|       HttpClientResponse response) async { |           .toBytes(); | ||||||
|     final bytes = |  | ||||||
|         (await response.fold<BytesBuilder>(BytesBuilder(), (b, d) => b..add(d))) |  | ||||||
|             .toBytes(); |  | ||||||
|  |  | ||||||
|     final headers = <String, String>{}; |   final headers = <String, String>{}; | ||||||
|     response.headers.forEach((name, values) { |   response.headers.forEach((name, values) { | ||||||
|       headers[name] = values.join(', '); |     headers[name] = values.join(', '); | ||||||
|     }); |   }); | ||||||
|  |  | ||||||
|     httpClient.close(); |   httpClient.close(); | ||||||
|  |  | ||||||
|     return http.Response.bytes( |   return http.Response.bytes( | ||||||
|       bytes, |     bytes, | ||||||
|       response.statusCode, |     response.statusCode, | ||||||
|       headers: headers, |     headers: headers, | ||||||
|       request: http.Request(method, Uri.parse(url)), |     request: http.Request(method, Uri.parse(url)), | ||||||
|     ); |   ); | ||||||
|   } | } | ||||||
|  |  | ||||||
| abstract class AppSource { | abstract class AppSource { | ||||||
|   List<String> hosts = []; |   List<String> hosts = []; | ||||||
| @@ -639,7 +636,8 @@ abstract class AppSource { | |||||||
|     var method = postBody == null ? 'GET' : 'POST'; |     var method = postBody == null ? 'GET' : 'POST'; | ||||||
|     var requestHeaders = await getRequestHeaders(additionalSettings); |     var requestHeaders = await getRequestHeaders(additionalSettings); | ||||||
|     var streamedResponseAndClient = await sourceRequestStreamResponse( |     var streamedResponseAndClient = await sourceRequestStreamResponse( | ||||||
|         method, url, requestHeaders, additionalSettings, followRedirects: followRedirects); |         method, url, requestHeaders, additionalSettings, | ||||||
|  |         followRedirects: followRedirects, postBody: postBody); | ||||||
|     return await httpClientResponseStreamToFinalResponse( |     return await httpClientResponseStreamToFinalResponse( | ||||||
|         streamedResponseAndClient.key, |         streamedResponseAndClient.key, | ||||||
|         method, |         method, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user