diff --git a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs index da4269363..ea4b3790f 100644 --- a/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs +++ b/src/NzbDrone.Common/Http/Dispatchers/ManagedHttpDispatcher.cs @@ -99,7 +99,7 @@ namespace NzbDrone.Common.Http.Dispatchers AddRequestHeaders(requestMessage, request.Headers); } - var httpClient = GetClient(request.Url); + var httpClient = GetClient(request.Url, request.ProxySettings); var sw = new Stopwatch(); @@ -154,9 +154,9 @@ namespace NzbDrone.Common.Http.Dispatchers } } - protected virtual System.Net.Http.HttpClient GetClient(HttpUri uri) + protected virtual System.Net.Http.HttpClient GetClient(HttpUri uri, HttpProxySettings requestProxy) { - var proxySettings = _proxySettingsProvider.GetProxySettings(uri); + var proxySettings = requestProxy ?? _proxySettingsProvider.GetProxySettings(uri); var key = proxySettings?.Key ?? NO_PROXY_KEY; diff --git a/src/NzbDrone.Common/Http/HttpRequest.cs b/src/NzbDrone.Common/Http/HttpRequest.cs index 5092207bc..779774a24 100644 --- a/src/NzbDrone.Common/Http/HttpRequest.cs +++ b/src/NzbDrone.Common/Http/HttpRequest.cs @@ -6,6 +6,7 @@ using System.Net.Http; using System.Text; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; +using NzbDrone.Common.Http.Proxy; namespace NzbDrone.Common.Http { @@ -37,7 +38,7 @@ namespace NzbDrone.Common.Http public HttpMethod Method { get; set; } public HttpHeader Headers { get; set; } public Encoding Encoding { get; set; } - public IWebProxy Proxy { get; set; } + public HttpProxySettings ProxySettings { get; set; } public byte[] ContentData { get; set; } public string ContentSummary { get; set; } public ICredentials Credentials { get; set; } diff --git a/src/NzbDrone.Core/IndexerProxies/Http/Http.cs b/src/NzbDrone.Core/IndexerProxies/Http/Http.cs index 838b3b2c8..8994f2919 100644 --- a/src/NzbDrone.Core/IndexerProxies/Http/Http.cs +++ b/src/NzbDrone.Core/IndexerProxies/Http/Http.cs @@ -3,7 +3,9 @@ using NLog; using NzbDrone.Common.Cloud; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Http.Proxy; using NzbDrone.Core.Localization; +using NzbDrone.Core.Notifications.Prowl; namespace NzbDrone.Core.IndexerProxies.Http { @@ -18,14 +20,13 @@ namespace NzbDrone.Core.IndexerProxies.Http public override HttpRequest PreRequest(HttpRequest request) { - if (Settings.Username.IsNotNullOrWhiteSpace() && Settings.Password.IsNotNullOrWhiteSpace()) - { - request.Proxy = new WebProxy(Settings.Host + ":" + Settings.Port, false, null, new NetworkCredential(Settings.Username, Settings.Password)); - } - else - { - request.Proxy = new WebProxy(Settings.Host + ":" + Settings.Port, false, null); - } + request.ProxySettings = new HttpProxySettings(ProxyType.Http, + Settings.Host, + Settings.Port, + null, + false, + Settings.Username, + Settings.Password); _logger.Debug("Applying HTTP(S) Proxy {0} to request {1}", Name, request.Url); diff --git a/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs b/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs index 9fccb766a..554d8a78b 100644 --- a/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs +++ b/src/NzbDrone.Core/IndexerProxies/Socks4/Socks4.cs @@ -4,6 +4,7 @@ using NLog; using NzbDrone.Common.Cloud; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Http.Proxy; using NzbDrone.Core.Localization; namespace NzbDrone.Core.IndexerProxies.Socks4 @@ -25,14 +26,13 @@ namespace NzbDrone.Core.IndexerProxies.Socks4 return null; } - if (Settings.Username.IsNotNullOrWhiteSpace() && Settings.Password.IsNotNullOrWhiteSpace()) - { - request.Proxy = new WebProxy(uri, false, null, new NetworkCredential(Settings.Username, Settings.Password)); - } - else - { - request.Proxy = new WebProxy(uri); - } + request.ProxySettings = new HttpProxySettings(ProxyType.Socks4, + Settings.Host, + Settings.Port, + null, + false, + Settings.Username, + Settings.Password); _logger.Debug("Applying Socks4 Proxy {0} to request {1}", Name, request.Url); diff --git a/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs b/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs index dfd572977..3a7ed0dbe 100644 --- a/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs +++ b/src/NzbDrone.Core/IndexerProxies/Socks5/Socks5.cs @@ -4,6 +4,7 @@ using NLog; using NzbDrone.Common.Cloud; using NzbDrone.Common.Extensions; using NzbDrone.Common.Http; +using NzbDrone.Common.Http.Proxy; using NzbDrone.Core.Localization; namespace NzbDrone.Core.IndexerProxies.Socks5 @@ -26,14 +27,13 @@ namespace NzbDrone.Core.IndexerProxies.Socks5 return null; } - if (Settings.Username.IsNotNullOrWhiteSpace() && Settings.Password.IsNotNullOrWhiteSpace()) - { - request.Proxy = new WebProxy(uri, false, null, new NetworkCredential(Settings.Username, Settings.Password)); - } - else - { - request.Proxy = new WebProxy(uri); - } + request.ProxySettings = new HttpProxySettings(ProxyType.Socks5, + Settings.Host, + Settings.Port, + null, + false, + Settings.Username, + Settings.Password); _logger.Debug("Applying Socks5 Proxy {0} to request {1}", Name, request.Url);