diff --git a/CryptoExchange.Net/ExtensionMethods.cs b/CryptoExchange.Net/ExtensionMethods.cs index 8037ede..1108d2f 100644 --- a/CryptoExchange.Net/ExtensionMethods.cs +++ b/CryptoExchange.Net/ExtensionMethods.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Runtime.InteropServices; using System.Security; using System.Text; +using System.Text.RegularExpressions; using System.Web; using CryptoExchange.Net.Logging; using CryptoExchange.Net.Objects; @@ -492,6 +493,22 @@ namespace CryptoExchange.Net return ub.Uri; } + /// + /// checks whether schema is provided + /// + /// + /// + public static bool IsSchemaProvided(this ApiProxy proxy) + { + var url = $"{proxy.Host}:{proxy.Port}"; + var r = new Regex(@"^(?\w+)://[^/]+?(?:\d+)?", + RegexOptions.None, TimeSpan.FromMilliseconds(150)); + var match = r.Match(url); + if (!match.Success) return false; + var proto = match.Result("${proto}"); + return !string.IsNullOrEmpty(proto); + } + } } diff --git a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs index dfce57c..f0229f7 100644 --- a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs +++ b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs @@ -212,12 +212,18 @@ namespace CryptoExchange.Net.Sockets /// public virtual void SetProxy(ApiProxy proxy) { - - _socket.Options.Proxy = new WebProxy + if (!proxy.IsSchemaProvided()) { - Address = new Uri($"{proxy.Host}:{proxy.Port}"), - Credentials = proxy.Password == null ? null : new NetworkCredential(proxy.Login, proxy.Password) - }; + _socket.Options.Proxy = new WebProxy(proxy.Host, proxy.Port); + } + else + { + _socket.Options.Proxy = new WebProxy + { + Address = new Uri($"{proxy.Host}:{proxy.Port}"), + Credentials = proxy.Password == null ? null : new NetworkCredential(proxy.Login, proxy.Password) + }; + } } ///