This commit is contained in:
Megumin 2026-05-02 20:00:34 +01:00 committed by GitHub
commit fc17c860ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -58,7 +58,7 @@ public override HttpResponse PostResponse(HttpResponse response)
if (flaresolverrResponse.StatusCode != HttpStatusCode.OK && flaresolverrResponse.StatusCode != HttpStatusCode.InternalServerError)
{
throw new FlareSolverrException("HTTP StatusCode not 200 or 500. Status is :" + response.StatusCode);
throw new FlareSolverrException("HTTP StatusCode not 200 or 500. Status is :" + flaresolverrResponse.StatusCode);
}
var result = JsonConvert.DeserializeObject<FlareSolverrResponse>(flaresolverrResponse.Content);
@ -71,9 +71,36 @@ public override HttpResponse PostResponse(HttpResponse response)
InjectCookies(newRequest, result);
//Request again with User-Agent and Cookies from Flaresolverr
// Try cookie-based retry first so subsequent requests can
// reuse the cookies without going through FlareSolverr.
var finalResponse = _httpClient.Execute(newRequest);
if (!CloudFlareDetectionService.IsCloudflareProtected(finalResponse))
{
return finalResponse;
}
// Cookie retry was blocked — fall back to FlareSolverr's response body.
// This happens when CF selectively challenges by IP/UA and FlareSolverr
// doesn't receive a challenge, so no cf_clearance cookie is returned.
if (result.Solution.Response.IsNotNullOrWhiteSpace())
{
var headers = new HttpHeader();
if (result.Solution.Headers?.ContentType.IsNotNullOrWhiteSpace() == true)
{
headers.ContentType = result.Solution.Headers.ContentType;
}
return new HttpResponse(
response.Request,
headers,
response.Cookies,
result.Solution.Response,
response.ElapsedTime,
HttpStatusCode.OK);
}
return finalResponse;
}