mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
Run - added parsing of the http response headers to examine the Refresh header if the response is a 503 (service unavailable). Extract the redirect and redirect delay from the header and follow it. This is to avoid the alternative of trying to calculate the cloudflare challenge/response.
This commit is contained in:
@@ -71,9 +71,9 @@ namespace Jackett.Utils.Clients
|
|||||||
});
|
});
|
||||||
|
|
||||||
if(webRequest.EmulateBrowser)
|
if(webRequest.EmulateBrowser)
|
||||||
client.DefaultRequestHeaders.Add("User-Agent", BrowserUtil.ChromeUserAgent);
|
client.DefaultRequestHeaders.Add("User-Agent", BrowserUtil.ChromeUserAgent);
|
||||||
else
|
else
|
||||||
client.DefaultRequestHeaders.Add("User-Agent", "Jackett/" + configService.GetVersion());
|
client.DefaultRequestHeaders.Add("User-Agent", "Jackett/" + configService.GetVersion());
|
||||||
HttpResponseMessage response = null;
|
HttpResponseMessage response = null;
|
||||||
var request = new HttpRequestMessage();
|
var request = new HttpRequestMessage();
|
||||||
request.Headers.ExpectContinue = false;
|
request.Headers.ExpectContinue = false;
|
||||||
@@ -118,6 +118,35 @@ namespace Jackett.Utils.Clients
|
|||||||
|
|
||||||
var result = new WebClientByteResult();
|
var result = new WebClientByteResult();
|
||||||
result.Content = await response.Content.ReadAsByteArrayAsync();
|
result.Content = await response.Content.ReadAsByteArrayAsync();
|
||||||
|
|
||||||
|
// some cloudflare clients are using a refresh header
|
||||||
|
// Pull it out manually
|
||||||
|
if (response.statusCode == System.Net.HttpStatusCode.ServiceUnavailable && response.Headers.Contains("Refresh"))
|
||||||
|
{
|
||||||
|
var refreshHeaders = response.Headers.GetValues("Refresh");
|
||||||
|
var redirval = "";
|
||||||
|
var redirtime = 0;
|
||||||
|
if (refreshHeaders != null)
|
||||||
|
{
|
||||||
|
foreach (var value in refreshHeaders)
|
||||||
|
{
|
||||||
|
var start = value.IndexOf("=");
|
||||||
|
var end = value.IndexOf(";");
|
||||||
|
var len = value.Length;
|
||||||
|
if (start > -1)
|
||||||
|
{
|
||||||
|
redirval = value.Substring(start + 1);
|
||||||
|
result.RedirectingTo = redirval;
|
||||||
|
// normally we don't want a serviceunavailable (503) to be a redirect, but that's the nature
|
||||||
|
// of this cloudflare approach..don't want to alter BaseWebResult.IsRedirect because normally
|
||||||
|
// it shoudln't include service unavailable..only if we have this redirect header.
|
||||||
|
response.StatusCode = System.Net.HttpStatusCode.Redirect;
|
||||||
|
redirtime = Int32.Parse(value.Substring(0, end));
|
||||||
|
System.Threading.Thread.Sleep(redirtime * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (response.Headers.Location != null)
|
if (response.Headers.Location != null)
|
||||||
{
|
{
|
||||||
result.RedirectingTo = response.Headers.Location.ToString();
|
result.RedirectingTo = response.Headers.Location.ToString();
|
||||||
|
Reference in New Issue
Block a user