فهرست منبع

增加httpclient代理前缀

懒得勤快 3 سال پیش
والد
کامیت
49133fc08b

+ 3 - 2
src/Masuit.MyBlogs.Core/Controllers/LinksController.cs

@@ -17,6 +17,7 @@ namespace Masuit.MyBlogs.Core.Controllers
     public class LinksController : BaseController
     {
         public IHttpClientFactory HttpClientFactory { get; set; }
+        public IConfiguration Configuration { get; set; }
 
         private HttpClient HttpClient => HttpClientFactory.CreateClient();
 
@@ -69,7 +70,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             HttpClient.DefaultRequestHeaders.Add("X-Forwarded-Host", "1.1.1.1");
             HttpClient.DefaultRequestHeaders.Add("X-Real-IP", "1.1.1.1");
             HttpClient.DefaultRequestVersion = new Version(2, 0);
-            return await HttpClient.GetAsync(link.Url, cancellationToken).ContinueWith(t =>
+            return await HttpClient.GetAsync(Configuration["HttpClientProxy:UriPrefix"] + link.Url, cancellationToken).ContinueWith(t =>
             {
                 if (t.IsFaulted || t.IsCanceled)
                 {
@@ -120,7 +121,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             HttpClient.DefaultRequestHeaders.Add("X-Real-IP", "1.1.1.1");
             HttpClient.DefaultRequestVersion = new Version(2, 0);
             using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
-            return HttpClient.GetAsync(link, cts.Token).ContinueWith(t =>
+            return HttpClient.GetAsync(Configuration["HttpClientProxy:UriPrefix"] + link, cts.Token).ContinueWith(t =>
             {
                 if (t.IsFaulted || t.IsCanceled)
                 {

+ 5 - 2
src/Masuit.MyBlogs.Core/Extensions/Hangfire/HangfireBackJob.cs

@@ -21,14 +21,17 @@ namespace Masuit.MyBlogs.Core.Extensions.Hangfire
         private readonly IWebHostEnvironment _hostEnvironment;
         private readonly IServiceScope _serviceScope;
         private readonly IRedisClient _redisClient;
+        private readonly IConfiguration _configuration;
+
         /// <summary>
         /// hangfire后台任务
         /// </summary>
-        public HangfireBackJob(IServiceProvider serviceProvider, IHttpClientFactory httpClientFactory, IWebHostEnvironment hostEnvironment, IRedisClient redisClient)
+        public HangfireBackJob(IServiceProvider serviceProvider, IHttpClientFactory httpClientFactory, IWebHostEnvironment hostEnvironment, IRedisClient redisClient, IConfiguration configuration)
         {
             _httpClientFactory = httpClientFactory;
             _hostEnvironment = hostEnvironment;
             _redisClient = redisClient;
+            _configuration = configuration;
             _serviceScope = serviceProvider.CreateScope();
         }
 
@@ -192,7 +195,7 @@ namespace Masuit.MyBlogs.Core.Extensions.Hangfire
             linksService.GetQuery(l => !l.Except).AsParallel().ForAll(link =>
             {
                 var prev = link.Status;
-                client.GetStringAsync(link.Url, new CancellationTokenSource(client.Timeout).Token).ContinueWith(t =>
+                client.GetStringAsync(_configuration["HttpClientProxy:UriPrefix"] + link.Url, new CancellationTokenSource(client.Timeout).Token).ContinueWith(t =>
                 {
                     if (t.IsCanceled || t.IsFaulted)
                     {

+ 13 - 8
src/Masuit.MyBlogs.Core/Extensions/UEditor/CrawlerHandler.cs

@@ -14,8 +14,13 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
     /// </summary>
     public class CrawlerHandler : Handler
     {
+        private readonly HttpClient _httpClient;
+        private readonly IConfiguration _configuration;
+
         public CrawlerHandler(HttpContext context) : base(context)
         {
+            _httpClient = context.RequestServices.GetRequiredService<IHttpClientFactory>().CreateClient();
+            _configuration = context.RequestServices.GetRequiredService<IConfiguration>();
         }
 
         public override async Task<string> Process()
@@ -30,7 +35,7 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
                     state = "SUCCESS",
                     list = (await sources.SelectAsync(s =>
                     {
-                        return new Crawler(s).Fetch(cts.Token).ContinueWith(t => new
+                        return new Crawler(s, _httpClient, _configuration).Fetch(cts.Token).ContinueWith(t => new
                         {
                             state = t.Result.State,
                             source = t.Result.SourceUrl,
@@ -55,14 +60,14 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
 
         public string State { get; set; }
 
-        private static readonly HttpClient HttpClient = new(new HttpClientHandler()
-        {
-            ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
-        });
+        private readonly HttpClient _httpClient;
+        private readonly IConfiguration _configuration;
 
-        public Crawler(string sourceUrl)
+        public Crawler(string sourceUrl, HttpClient httpClient, IConfiguration configuration)
         {
             SourceUrl = sourceUrl;
+            _httpClient = httpClient;
+            _configuration = configuration;
         }
 
         public async Task<Crawler> Fetch(CancellationToken token)
@@ -74,8 +79,8 @@ namespace Masuit.MyBlogs.Core.Extensions.UEditor
             }
             try
             {
-                HttpClient.DefaultRequestHeaders.Referrer = new Uri(SourceUrl);
-                using var response = await HttpClient.GetAsync(SourceUrl);
+                _httpClient.DefaultRequestHeaders.Referrer = new Uri(SourceUrl);
+                using var response = await _httpClient.GetAsync(_configuration["HttpClientProxy:UriPrefix"] + SourceUrl);
                 if (response.StatusCode != HttpStatusCode.OK)
                 {
                     State = "远程地址返回了错误的状态吗:" + response.StatusCode;

+ 2 - 1
src/Masuit.MyBlogs.Core/appsettings.json

@@ -60,7 +60,8 @@
     },
     "HttpClientProxy": { // HttpClient代理设置
         "Enabled": true,
-        "Uri": "http://127.0.0.1:7890" // 支持http模式和pac模式的代理
+        "Uri": "http://127.0.0.1:7890", // 支持http模式和pac模式的代理
+        "UriPrefix": "" //httpClient请求地址前缀:https://example.com/
     },
     "OneDrive": {
         /*获取 ClientId 与 ClientSecret