mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-09 04:22:30 +01:00
Fixed: uTorrent api proxy would fail on specific Win10 configurations. (The Phoenix Rises)
Moved token queryparam to start since uTorrent requires it. Fixed handling response missing an expected Set-Cookie header. Force Cache-Control: no-cache for uTorrent. Added Connection: KeepAlive to fix inexplicable uTorrent api failure.
This commit is contained in:
parent
edea488dbe
commit
e1ea17cabf
@ -17,7 +17,7 @@ public HttpResponse GetResponse(HttpRequest request, CookieContainer cookies)
|
||||
|
||||
webRequest.Method = request.Method.ToString();
|
||||
webRequest.UserAgent = UserAgentBuilder.UserAgent;
|
||||
webRequest.KeepAlive = false;
|
||||
webRequest.KeepAlive = request.ConnectionKeepAlive;
|
||||
webRequest.AllowAutoRedirect = request.AllowAutoRedirect;
|
||||
webRequest.CookieContainer = cookies;
|
||||
|
||||
|
@ -35,6 +35,7 @@ public HttpRequest(string url, HttpAccept httpAccept = null)
|
||||
public string ContentSummary { get; set; }
|
||||
public bool SuppressHttpError { get; set; }
|
||||
public bool AllowAutoRedirect { get; set; }
|
||||
public bool ConnectionKeepAlive { get; set; }
|
||||
public Dictionary<string, string> Cookies { get; private set; }
|
||||
public bool StoreResponseCookie { get; set; }
|
||||
public TimeSpan RequestTimeout { get; set; }
|
||||
|
@ -20,6 +20,7 @@ public class HttpRequestBuilder
|
||||
public HttpHeader Headers { get; private set; }
|
||||
public bool SuppressHttpError { get; set; }
|
||||
public bool AllowAutoRedirect { get; set; }
|
||||
public bool ConnectionKeepAlive { get; set; }
|
||||
public NetworkCredential NetworkCredential { get; set; }
|
||||
public Dictionary<string, string> Cookies { get; private set; }
|
||||
public List<HttpFormData> FormData { get; private set; }
|
||||
@ -98,6 +99,7 @@ protected virtual void Apply(HttpRequest request)
|
||||
request.Method = Method;
|
||||
request.SuppressHttpError = SuppressHttpError;
|
||||
request.AllowAutoRedirect = AllowAutoRedirect;
|
||||
request.ConnectionKeepAlive = ConnectionKeepAlive;
|
||||
|
||||
if (NetworkCredential != null)
|
||||
{
|
||||
@ -232,6 +234,13 @@ public virtual HttpRequestBuilder Resource(string resourceUrl)
|
||||
return this;
|
||||
}
|
||||
|
||||
public virtual HttpRequestBuilder KeepAlive(bool keepAlive = true)
|
||||
{
|
||||
ConnectionKeepAlive = keepAlive;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public virtual HttpRequestBuilder Post()
|
||||
{
|
||||
Method = HttpMethod.POST;
|
||||
@ -253,6 +262,19 @@ public virtual HttpRequestBuilder SetHeader(string name, string value)
|
||||
return this;
|
||||
}
|
||||
|
||||
public virtual HttpRequestBuilder AddPrefixQueryParam(string key, object value, bool replace = false)
|
||||
{
|
||||
if (replace)
|
||||
{
|
||||
QueryParams.RemoveAll(v => v.Key == key);
|
||||
SuffixQueryParams.RemoveAll(v => v.Key == key);
|
||||
}
|
||||
|
||||
QueryParams.Insert(0, new KeyValuePair<string, string>(key, value.ToString()));
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public virtual HttpRequestBuilder AddQueryParam(string key, object value, bool replace = false)
|
||||
{
|
||||
if (replace)
|
||||
|
@ -61,7 +61,10 @@ public Dictionary<string, string> GetCookies()
|
||||
{
|
||||
var result = new Dictionary<string, string>();
|
||||
|
||||
foreach (var cookie in Headers.GetValues("Set-Cookie"))
|
||||
var setCookieHeaders = Headers.GetValues("Set-Cookie");
|
||||
if (setCookieHeaders != null)
|
||||
{
|
||||
foreach (var cookie in setCookieHeaders)
|
||||
{
|
||||
var match = RegexSetCookie.Match(cookie);
|
||||
if (match.Success)
|
||||
@ -69,6 +72,7 @@ public Dictionary<string, string> GetCookies()
|
||||
result[match.Groups[1].Value] = match.Groups[2].Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -158,6 +158,8 @@ private HttpRequestBuilder BuildRequest(UTorrentSettings settings)
|
||||
{
|
||||
var requestBuilder = new HttpRequestBuilder(false, settings.Host, settings.Port)
|
||||
.Resource("/gui/")
|
||||
.KeepAlive()
|
||||
.SetHeader("Cache-Control", "no-cache")
|
||||
.Accept(HttpAccept.Json);
|
||||
|
||||
requestBuilder.NetworkCredential = new NetworkCredential(settings.Username, settings.Password);
|
||||
@ -248,7 +250,7 @@ private void AuthenticateClient(HttpRequestBuilder requestBuilder, UTorrentSetti
|
||||
}
|
||||
|
||||
requestBuilder.SetCookies(cookies);
|
||||
requestBuilder.AddQueryParam("token", authToken, true);
|
||||
requestBuilder.AddPrefixQueryParam("token", authToken, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user