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); } } }