mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-04-25 06:17:26 -04:00
Fixed: (Flaresolverr) YggCookie and YggTorrent Issues
This commit is contained in:
parent
4eadd4cb2f
commit
0f52258d53
3 changed files with 53 additions and 12 deletions
|
@ -254,7 +254,8 @@ namespace NzbDrone.Common.Http.Dispatchers
|
||||||
webRequest.TransferEncoding = header.Value;
|
webRequest.TransferEncoding = header.Value;
|
||||||
break;
|
break;
|
||||||
case "User-Agent":
|
case "User-Agent":
|
||||||
throw new NotSupportedException("User-Agent other than Prowlarr not allowed.");
|
webRequest.UserAgent = header.Value;
|
||||||
|
break;
|
||||||
case "Proxy-Connection":
|
case "Proxy-Connection":
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
|
@ -107,6 +107,18 @@ namespace NzbDrone.Common.Http
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string UserAgent
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return GetSingleValue("User-Agent");
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetSingleValue("User-Agent", value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public string Accept
|
public string Accept
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
|
@ -5,7 +5,9 @@ using System.Net;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using NzbDrone.Common.Cache;
|
||||||
using NzbDrone.Common.Cloud;
|
using NzbDrone.Common.Cloud;
|
||||||
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Common.Http;
|
using NzbDrone.Common.Http;
|
||||||
using NzbDrone.Common.Serializer;
|
using NzbDrone.Common.Serializer;
|
||||||
using NzbDrone.Core.Localization;
|
using NzbDrone.Core.Localization;
|
||||||
|
@ -16,10 +18,12 @@ namespace NzbDrone.Core.IndexerProxies.FlareSolverr
|
||||||
public class FlareSolverr : HttpIndexerProxyBase<FlareSolverrSettings>
|
public class FlareSolverr : HttpIndexerProxyBase<FlareSolverrSettings>
|
||||||
{
|
{
|
||||||
private static readonly HashSet<string> CloudflareServerNames = new HashSet<string> { "cloudflare", "cloudflare-nginx" };
|
private static readonly HashSet<string> CloudflareServerNames = new HashSet<string> { "cloudflare", "cloudflare-nginx" };
|
||||||
|
private readonly ICached<string> _cache;
|
||||||
|
|
||||||
public FlareSolverr(IProwlarrCloudRequestBuilder cloudRequestBuilder, IHttpClient httpClient, Logger logger, ILocalizationService localizationService)
|
public FlareSolverr(IProwlarrCloudRequestBuilder cloudRequestBuilder, IHttpClient httpClient, Logger logger, ILocalizationService localizationService, ICacheManager cacheManager)
|
||||||
: base(cloudRequestBuilder, httpClient, logger, localizationService)
|
: base(cloudRequestBuilder, httpClient, logger, localizationService)
|
||||||
{
|
{
|
||||||
|
_cache = cacheManager.GetCache<string>(typeof(string), "UserAgent");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Name => "FlareSolverr";
|
public override string Name => "FlareSolverr";
|
||||||
|
@ -29,6 +33,12 @@ namespace NzbDrone.Core.IndexerProxies.FlareSolverr
|
||||||
//Try original request first, ignore errors, detect CF in post response
|
//Try original request first, ignore errors, detect CF in post response
|
||||||
request.SuppressHttpError = true;
|
request.SuppressHttpError = true;
|
||||||
|
|
||||||
|
//Inject UA if not present
|
||||||
|
if (_cache.Find(request.Url.Host).IsNotNullOrWhiteSpace() && request.Headers.UserAgent.IsNullOrWhiteSpace())
|
||||||
|
{
|
||||||
|
request.Headers.UserAgent = _cache.Find(request.Url.Host);
|
||||||
|
}
|
||||||
|
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,18 +61,18 @@ namespace NzbDrone.Core.IndexerProxies.FlareSolverr
|
||||||
|
|
||||||
result = JsonConvert.DeserializeObject<FlareSolverrResponse>(flaresolverrResponse.Content);
|
result = JsonConvert.DeserializeObject<FlareSolverrResponse>(flaresolverrResponse.Content);
|
||||||
|
|
||||||
var cookieCollection = new CookieCollection();
|
var newRequest = response.Request;
|
||||||
var responseHeader = new HttpHeader();
|
|
||||||
|
|
||||||
foreach (var cookie in result.Solution.Cookies)
|
//Cache the user-agent so we can inject it in next request to avoid re-solve
|
||||||
{
|
_cache.Set(response.Request.Url.Host, result.Solution.UserAgent);
|
||||||
cookieCollection.Add(cookie.ToCookieObj());
|
newRequest.Headers.UserAgent = result.Solution.UserAgent;
|
||||||
}
|
|
||||||
|
|
||||||
//Build new response with FS Cookie and Site Response
|
InjectCookies(newRequest, result);
|
||||||
var newResponse = new HttpResponse(response.Request, responseHeader, cookieCollection, result.Solution.Response);
|
|
||||||
|
|
||||||
return newResponse;
|
//Request again with User-Agent and Cookies from Flaresolvrr
|
||||||
|
var finalResponse = _httpClient.Execute(newRequest);
|
||||||
|
|
||||||
|
return finalResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsCloudflareProtected(HttpResponse response)
|
private static bool IsCloudflareProtected(HttpResponse response)
|
||||||
|
@ -79,6 +89,24 @@ namespace NzbDrone.Core.IndexerProxies.FlareSolverr
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void InjectCookies(HttpRequest request, FlareSolverrResponse flareSolverrResponse)
|
||||||
|
{
|
||||||
|
var rCookies = flareSolverrResponse.Solution.Cookies;
|
||||||
|
|
||||||
|
if (!rCookies.Any())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rCookiesList = rCookies.Select(x => x.Name).ToList();
|
||||||
|
|
||||||
|
foreach (var rCookie in rCookies)
|
||||||
|
{
|
||||||
|
request.Cookies.Remove(rCookie.Name);
|
||||||
|
request.Cookies.Add(rCookie.Name, rCookie.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private HttpRequest GenerateFlareSolverrRequest(HttpRequest request)
|
private HttpRequest GenerateFlareSolverrRequest(HttpRequest request)
|
||||||
{
|
{
|
||||||
FlareSolverrRequest req;
|
FlareSolverrRequest req;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue