diff --git a/Flow.Launcher.Core/Updater.cs b/Flow.Launcher.Core/Updater.cs
index 99d48275a..4ad8b19be 100644
--- a/Flow.Launcher.Core/Updater.cs
+++ b/Flow.Launcher.Core/Updater.cs
@@ -139,7 +139,7 @@ namespace Flow.Launcher.Core
var latest = releases.Where(r => !r.Prerelease).OrderByDescending(r => r.PublishedAt).First();
var latestUrl = latest.HtmlUrl.Replace("/tag/", "/download/");
- var client = new WebClient { Proxy = Http.WebProxy() };
+ var client = new WebClient { Proxy = Http.WebProxy };
var downloader = new FileDownloader(client);
var manager = new UpdateManager(latestUrl, urlDownloader: downloader);
diff --git a/Flow.Launcher.Infrastructure/Http/Http.cs b/Flow.Launcher.Infrastructure/Http/Http.cs
index b7d274205..038362a0d 100644
--- a/Flow.Launcher.Infrastructure/Http/Http.cs
+++ b/Flow.Launcher.Infrastructure/Http/Http.cs
@@ -13,6 +13,13 @@ namespace Flow.Launcher.Infrastructure.Http
{
private const string UserAgent = @"Mozilla/5.0 (Trident/7.0; rv:11.0) like Gecko";
+ private static HttpClient client;
+ private static SocketsHttpHandler socketsHttpHandler = new SocketsHttpHandler()
+ {
+ UseProxy = true,
+ Proxy = WebProxy
+ };
+
static Http()
{
// need to be added so it would work on a win10 machine
@@ -20,36 +27,55 @@ namespace Flow.Launcher.Infrastructure.Http
ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls12;
+
+ client.DefaultRequestHeaders.Add("User-Agent", UserAgent);
+
+ }
+ private static HttpProxy proxy;
+ public static HttpProxy Proxy
+ {
+ private get
+ {
+ return proxy;
+ }
+ set
+ {
+ proxy = value;
+ UpdateProxy();
+ }
}
- public static HttpProxy Proxy { private get; set; }
- public static IWebProxy WebProxy()
+ public static WebProxy WebProxy { get; private set; }
+
+ ///
+ /// Update the Address of the Proxy to modify the client Proxy
+ ///
+ public static void UpdateProxy()
+ // TODO: need test with a proxy
{
if (Proxy != null && Proxy.Enabled && !string.IsNullOrEmpty(Proxy.Server))
{
if (string.IsNullOrEmpty(Proxy.UserName) || string.IsNullOrEmpty(Proxy.Password))
{
- var webProxy = new WebProxy(Proxy.Server, Proxy.Port);
- return webProxy;
+ WebProxy.Address = new Uri($"http://{Proxy.Server}:{Proxy.Port}");
+ WebProxy.Credentials = null;
}
else
{
- var webProxy = new WebProxy(Proxy.Server, Proxy.Port)
- {
- Credentials = new NetworkCredential(Proxy.UserName, Proxy.Password)
- };
- return webProxy;
+ WebProxy.Address = new Uri($"http://{Proxy.Server}:{Proxy.Port}");
+ WebProxy.Credentials = new NetworkCredential(Proxy.UserName, Proxy.Password);
}
}
else
{
- return WebRequest.GetSystemWebProxy();
+ WebProxy.Address = new WebProxy().Address;
+ WebProxy.Credentials = null;
}
}
public static void Download([NotNull] string url, [NotNull] string filePath)
{
- var client = new WebClient { Proxy = WebProxy() };
+ var client = new WebClient { Proxy = WebProxy };
client.Headers.Add("user-agent", UserAgent);
client.DownloadFile(url, filePath);
}
@@ -57,26 +83,17 @@ namespace Flow.Launcher.Infrastructure.Http
public static async Task Get([NotNull] string url, string encoding = "UTF-8")
{
Log.Debug($"|Http.Get|Url <{url}>");
- var request = WebRequest.CreateHttp(url);
- request.Method = "GET";
- request.Timeout = 1000;
- request.Proxy = WebProxy();
- request.UserAgent = UserAgent;
- var response = await request.GetResponseAsync() as HttpWebResponse;
- response = response.NonNull();
- var stream = response.GetResponseStream().NonNull();
-
- using (var reader = new StreamReader(stream, Encoding.GetEncoding(encoding)))
+ var response = await client.GetAsync(url);
+ using var stream = await response.Content.ReadAsStreamAsync();
+ using var reader = new StreamReader(stream, Encoding.GetEncoding(encoding));
+ var content = await reader.ReadToEndAsync();
+ if (response.StatusCode == HttpStatusCode.OK)
{
- var content = await reader.ReadToEndAsync();
- if (response.StatusCode == HttpStatusCode.OK)
- {
- return content;
- }
- else
- {
- throw new HttpRequestException($"Error code <{response.StatusCode}> with content <{content}> returned from <{url}>");
- }
+ return content;
+ }
+ else
+ {
+ throw new HttpRequestException($"Error code <{response.StatusCode}> with content <{content}> returned from <{url}>");
}
}
}