diff --git a/FastGithub.Upgrade/FastGithub.Upgrade.csproj b/FastGithub.Upgrade/FastGithub.Upgrade.csproj index ddaba9e..a870eac 100644 --- a/FastGithub.Upgrade/FastGithub.Upgrade.csproj +++ b/FastGithub.Upgrade/FastGithub.Upgrade.csproj @@ -1,11 +1,15 @@  - - net5.0 - + + net5.0 + - - - + + + + + + + diff --git a/FastGithub.Upgrade/ReverseProxyHttpHandler.cs b/FastGithub.Upgrade/ReverseProxyHttpHandler.cs new file mode 100644 index 0000000..48d43ce --- /dev/null +++ b/FastGithub.Upgrade/ReverseProxyHttpHandler.cs @@ -0,0 +1,43 @@ +using System; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace FastGithub.Upgrade +{ + /// + /// 本机反向代理的httpHandler + /// + sealed class ReverseProxyHttpHandler : DelegatingHandler + { + /// + /// 本机反向代理的httpHandler + /// + public ReverseProxyHttpHandler() + { + this.InnerHandler = new HttpClientHandler(); + } + + /// + /// 替换为Loopback + /// + /// + /// + /// + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + var uri = request.RequestUri; + if (uri != null && uri.HostNameType == UriHostNameType.Dns) + { + var domain = uri.Host; + var builder = new UriBuilder(uri) { Host = IPAddress.Loopback.ToString() }; + + request.RequestUri = builder.Uri; + request.Headers.Host = domain; + } + + return await base.SendAsync(request, cancellationToken); + } + } +} diff --git a/FastGithub.Upgrade/UpgradeHostedService.cs b/FastGithub.Upgrade/UpgradeHostedService.cs index 8c9e1ce..ad97f32 100644 --- a/FastGithub.Upgrade/UpgradeHostedService.cs +++ b/FastGithub.Upgrade/UpgradeHostedService.cs @@ -33,7 +33,7 @@ namespace FastGithub.Upgrade /// protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - var maxTryCount = 3; + var maxTryCount = 5; for (var i = 1; i <= maxTryCount; i++) { try diff --git a/FastGithub.Upgrade/UpgradeService.cs b/FastGithub.Upgrade/UpgradeService.cs index 07a507d..94c54b3 100644 --- a/FastGithub.Upgrade/UpgradeService.cs +++ b/FastGithub.Upgrade/UpgradeService.cs @@ -59,7 +59,10 @@ namespace FastGithub.Upgrade /// public async Task GetLastedReleaseAsync(CancellationToken cancellationToken) { - using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30d) }; + using var httpClient = new HttpClient(new ReverseProxyHttpHandler()) + { + Timeout = TimeSpan.FromSeconds(30d), + }; httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*")); httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(nameof(FastGithub), "1.0"));