Parcourir la source

Merge pull request #49 from LuoYun-Team/modnet

pref(ModNet):使用 HttpClient 替代过时的 WebRequest 和 WebClient
薄奚梦灵 il y a 1 an
Parent
commit
9a0ad08498

+ 14 - 14
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}
     ''' <summary>
     ''' 测试 Ping。失败则返回 -1。
     ''' </summary>
+    '''
     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

+ 7 - 6
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
     ''' <summary>
     ''' 设置 Headers 的 UA、Referer。
     ''' </summary>
-    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
     ''' <summary>
     ''' 设置 Headers 的 UA、Referer。