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

View file

@ -58,11 +58,15 @@ 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);
_logger.Debug("FlareSolverr response status: {0}, message: {1}", result.Status, result.Message);
_logger.Debug("FlareSolverr solution has response body: {0} (length: {1})", result.Solution.Response.IsNotNullOrWhiteSpace(), result.Solution.Response?.Length ?? 0);
_logger.Debug("FlareSolverr returned {0} cookies, UA: {1}", result.Solution.Cookies?.Length ?? 0, result.Solution.UserAgent);
var newRequest = response.Request;
//Cache the user-agent so we can inject it in next request to avoid re-solve
@ -71,8 +75,24 @@ public override HttpResponse PostResponse(HttpResponse response)
InjectCookies(newRequest, result);
//Request again with User-Agent and Cookies from Flaresolverr
// Use FlareSolverr's response body directly — a second HTTP request
// gets 403'd because cf_clearance is bound to the solver's TLS fingerprint
if (result.Solution.Response.IsNotNullOrWhiteSpace())
{
_logger.Debug("Using FlareSolverr response body directly (skipping cookie retry)");
return new HttpResponse(
response.Request,
response.Headers,
response.Cookies,
result.Solution.Response,
response.ElapsedTime,
HttpStatusCode.OK);
}
// Fallback: if FlareSolverr returned no body, try cookies (original behavior)
_logger.Debug("Attempting cookie-based retry for {0}", newRequest.Url);
var finalResponse = _httpClient.Execute(newRequest);
_logger.Debug("Cookie retry response: {0} (CF protected: {1})", finalResponse.StatusCode, CloudFlareDetectionService.IsCloudflareProtected(finalResponse));
return finalResponse;
}