From 74657d54c7ee1b7e7782d9c15bf23f292b387b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=84=E5=A5=9A=E6=A2=A6=E7=81=B5?= Date: Sun, 13 Apr 2025 15:21:57 +0800 Subject: [PATCH] =?UTF-8?q?pref(ModNet):=E4=BD=BF=E7=94=A8=20HttpClient=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=E8=BF=87=E6=97=B6=E7=9A=84=20WebRequest=20?= =?UTF-8?q?=E5=92=8C=20WebClient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plain Craft Launcher 2/Modules/Base/ModNet.vb | 28 +++++++++---------- Plain Craft Launcher 2/Modules/ModSecret.vb | 13 +++++---- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Base/ModNet.vb b/Plain Craft Launcher 2/Modules/Base/ModNet.vb index ba0e019..6680548 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModNet.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModNet.vb @@ -1,9 +1,13 @@ -Public Module ModNet - Public Const NetDownloadEnd As String = ".PCLDownloading" +Imports System.Net.Http +Public Module ModNet + Public Const NetDownloadEnd As String = ".PCLDownloading" + Public ReadOnly Client As New HttpClient() + Public ReadOnly ClientHandler As New HttpClientHandler() With {.AllowAutoRedirect = False} ''' ''' 测试 Ping。失败则返回 -1。 ''' + ''' Public Function Ping(Ip As String, Optional Timeout As Integer = 10000, Optional MakeLog As Boolean = True) As Integer Dim PingResult As NetworkInformation.PingReply Try @@ -61,21 +65,17 @@ Retry: End Select End Try End Function - Public Function NetGetCodeByClient(Url As String, Encoding As Encoding, Timeout As Integer, Accept As String, Optional UseBrowserUserAgent As Boolean = False) As String + Public Async Function NetGetCodeByClient(Url As String, Encoding As Encoding, Timeout As Integer, Accept As String, Optional UseBrowserUserAgent As Boolean = False) As Tasks.Task(Of String) Url = SecretCdnSign(Url) Log("[Net] 获取客户端网络结果:" & Url & ",最大超时 " & Timeout) - Dim Request As CookieWebClient - Dim res As HttpWebResponse = Nothing - Dim HttpStream As Stream = Nothing + Try - Request = New CookieWebClient With { - .Encoding = Encoding, - .Timeout = Timeout - } - Request.Headers("Accept") = Accept - Request.Headers("Accept-Language") = "en-US,en;q=0.5" - Request.Headers("X-Requested-With") = "XMLHttpRequest" - SecretHeadersSign(Url, Request, UseBrowserUserAgent) + SecretHeadersSign(Url, Client, UseBrowserUserAgent) + Client.DefaultRequestHeaders.Accept.Add(New Headers.MediaTypeWithQualityHeaderValue(Accept)) + Client.DefaultRequestHeaders.AcceptLanguage.Add(New Headers.StringWithQualityHeaderValue("en-US,en;q=0.5")) + Client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest") + Dim Result = Await Client.GetAsync(Url) + Return Request.DownloadString(Url) Catch ex As Exception If ex.GetType.Equals(GetType(WebException)) AndAlso CType(ex, WebException).Status = WebExceptionStatus.Timeout Then diff --git a/Plain Craft Launcher 2/Modules/ModSecret.vb b/Plain Craft Launcher 2/Modules/ModSecret.vb index 3c38897..1c55798 100644 --- a/Plain Craft Launcher 2/Modules/ModSecret.vb +++ b/Plain Craft Launcher 2/Modules/ModSecret.vb @@ -1,6 +1,7 @@ '由于包含加解密等安全信息,本文件中的部分代码已被删除 Imports System.Security.Cryptography +Imports System.Net.Http Friend Module ModSecret @@ -98,16 +99,16 @@ Friend Module ModSecret ''' ''' 设置 Headers 的 UA、Referer。 ''' - Friend Sub SecretHeadersSign(Url As String, ByRef Client As WebClient, Optional UseBrowserUserAgent As Boolean = False) + Friend Sub SecretHeadersSign(Url As String, ByRef Client As HttpClient, Optional UseBrowserUserAgent As Boolean = False) If Url.Contains("baidupcs.com") OrElse Url.Contains("baidu.com") Then - Client.Headers("User-Agent") = "LogStatistic" '#4951 + Client.DefaultRequestHeaders.Add("User-Agent", "LogStatistic") ElseIf UseBrowserUserAgent Then - Client.Headers("User-Agent") = "PCL2/" & VersionStandardCode & " Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36" + Client.DefaultRequestHeaders.Add("User-Agent", $"PCL2/{VersionStandardCode} Mozilla/5.0 AppleWebKit/537.36 Chrome/63.0.3239.132 Safari/537.36") Else - Client.Headers("User-Agent") = "PCL2/" & VersionStandardCode + Client.DefaultRequestHeaders.Add("User-Agent", $"PCL2/{VersionStandardCode}") End If - Client.Headers("Referer") = "http://" & VersionCode & ".open.pcl2.server/" - If Url.Contains("api.curseforge.com") Then Client.Headers("x-api-key") = CurseForgeAPIKey + Client.DefaultRequestHeaders.Add("Referer", $"http://{VersionCode}.open.pcl2.server/") + If Url.Contains("api.curseforge.com") Then Client.DefaultRequestHeaders.Add("x-api-key", CurseForgeAPIKey) End Sub ''' ''' 设置 Headers 的 UA、Referer。