mirror of
https://github.com/BeyondDimension/SteamTools.git
synced 2026-10-17 05:30:48 +08:00
add Http3 Client Test
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace System
|
||||
{
|
||||
public static class HttpExtensions
|
||||
{
|
||||
#region UseDefaultSendX 使用此扩展代替 Send,将 DefaultRequestVersion 与 DefaultVersionPolicy 赋值给 HttpRequestMessage
|
||||
|
||||
#if NETSTANDARD
|
||||
public static Version DefaultRequestVersion { get; set; } = HttpVersion.Version20;
|
||||
#endif
|
||||
|
||||
static void UseDefault(HttpClient httpClient, HttpRequestMessage request)
|
||||
{
|
||||
#if NETSTANDARD
|
||||
request.Version = DefaultRequestVersion;
|
||||
#else
|
||||
request.Version = httpClient.DefaultRequestVersion;
|
||||
request.VersionPolicy = httpClient.DefaultVersionPolicy;
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="HttpClient.SendAsync(HttpRequestMessage)"/>
|
||||
public static Task<HttpResponseMessage> UseDefaultSendAsync(this HttpClient httpClient, HttpRequestMessage request)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.SendAsync(request);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="HttpClient.SendAsync(HttpRequestMessage, HttpCompletionOption)"/>
|
||||
public static Task<HttpResponseMessage> UseDefaultSendAsync(this HttpClient httpClient, HttpRequestMessage request, HttpCompletionOption completionOption)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.SendAsync(request, completionOption);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="HttpClient.SendAsync(HttpRequestMessage, HttpCompletionOption, CancellationToken)"/>
|
||||
public static Task<HttpResponseMessage> UseDefaultSendAsync(this HttpClient httpClient, HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.SendAsync(request, completionOption, cancellationToken);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="HttpClient.SendAsync(HttpRequestMessage, CancellationToken)"/>
|
||||
public static Task<HttpResponseMessage> UseDefaultSendAsync(this HttpClient httpClient, HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.SendAsync(request, cancellationToken);
|
||||
}
|
||||
|
||||
#if NET5_0_OR_GREATER
|
||||
/// <inheritdoc cref="HttpClient.Send(HttpRequestMessage)"/>
|
||||
public static HttpResponseMessage UseDefaultSend(this HttpClient httpClient, HttpRequestMessage request)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.Send(request);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="HttpClient.Send(HttpRequestMessage, HttpCompletionOption)"/>
|
||||
public static HttpResponseMessage UseDefaultSend(this HttpClient httpClient, HttpRequestMessage request, HttpCompletionOption completionOption)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.Send(request, completionOption);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="HttpClient.Send(HttpRequestMessage, HttpCompletionOption, CancellationToken)"/>
|
||||
public static HttpResponseMessage UseDefaultSend(this HttpClient httpClient, HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.Send(request, completionOption, cancellationToken);
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="HttpClient.Send(HttpRequestMessage, CancellationToken)"/>
|
||||
public static HttpResponseMessage UseDefaultSend(this HttpClient httpClient, HttpRequestMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
UseDefault(httpClient, request);
|
||||
return httpClient.Send(request, cancellationToken);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,8 @@ using System.Globalization;
|
||||
using System.IO;
|
||||
using System.IO.Pipes;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
@@ -74,6 +76,9 @@ namespace System.Application.UI.ViewModels
|
||||
|
||||
public void DebugButton_Click()
|
||||
{
|
||||
TestHttp3Quic();
|
||||
return;
|
||||
|
||||
//#if DEBUG
|
||||
// //TestAppUpdate();
|
||||
// //return;
|
||||
@@ -94,6 +99,29 @@ namespace System.Application.UI.ViewModels
|
||||
});
|
||||
}
|
||||
|
||||
public async void TestHttp3Quic()
|
||||
{
|
||||
// https://docs.microsoft.com/zh-cn/dotnet/core/extensions/httpclient-http3
|
||||
// https://devblogs.microsoft.com/dotnet/http-3-support-in-dotnet-6
|
||||
using HttpClient httpClient = new()
|
||||
{
|
||||
#if NET6_0_OR_GREATER
|
||||
DefaultRequestVersion = HttpVersion.Version30,
|
||||
#endif
|
||||
};
|
||||
|
||||
using HttpRequestMessage request = new(HttpMethod.Get, "https://cloudflare-quic.com/");
|
||||
using var response = await httpClient.UseDefaultSendAsync(request);
|
||||
|
||||
var htmlString = await response.Content.ReadAsStringAsync();
|
||||
|
||||
StringBuilder @string = new();
|
||||
@string.AppendFormatLine("request.Version: {0}", request.Version);
|
||||
@string.AppendFormatLine("response.Version: {0}", response.Version);
|
||||
@string.AppendLine(htmlString);
|
||||
DebugString = @string.ToString();
|
||||
}
|
||||
|
||||
//static async void TestTextBoxWindow(int state)
|
||||
//{
|
||||
// string? value = null;
|
||||
|
||||
@@ -506,7 +506,6 @@ namespace System.Application.Services.CloudService
|
||||
|
||||
var request = new HttpRequestMessage(method, requestUri)
|
||||
{
|
||||
Version = HttpVersion.Version20,
|
||||
Content = GetRequestContent(
|
||||
isSecurity,
|
||||
aes,
|
||||
@@ -555,7 +554,7 @@ namespace System.Application.Services.CloudService
|
||||
|
||||
HandleHttpRequest(request);
|
||||
|
||||
var response = await client.SendAsync(request,
|
||||
var response = await client.UseDefaultSendAsync(request,
|
||||
HttpCompletionOption.ResponseHeadersRead,
|
||||
cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
@@ -757,10 +756,7 @@ namespace System.Application.Services.CloudService
|
||||
IApiResponse responseResult;
|
||||
try
|
||||
{
|
||||
var request = new HttpRequestMessage(method, requestUri)
|
||||
{
|
||||
Version = HttpVersion.Version20,
|
||||
};
|
||||
var request = new HttpRequestMessage(method, requestUri);
|
||||
|
||||
JWTEntity? jwt = null;
|
||||
|
||||
@@ -773,7 +769,7 @@ namespace System.Application.Services.CloudService
|
||||
|
||||
HandleHttpRequest(request);
|
||||
|
||||
var response = await client.SendAsync(request,
|
||||
var response = await client.UseDefaultSendAsync(request,
|
||||
HttpCompletionOption.ResponseHeadersRead,
|
||||
cancellationToken)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
+1
-1
@@ -275,7 +275,7 @@ namespace System.Application
|
||||
c.DefaultRequestVersion = HttpVersion.Version20;
|
||||
#endif
|
||||
#if NET5_0_OR_GREATER
|
||||
c.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact;
|
||||
c.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher;
|
||||
#endif
|
||||
}, configureHandler:
|
||||
#if NETCOREAPP2_1_OR_GREATER
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace System.Application
|
||||
public static void OneTimeTearDownCore()
|
||||
{
|
||||
#if !Desktop_UnitTest && !__ANDROID__
|
||||
HostsFileTest.DeleteAllTempFileName();
|
||||
HostsFileTest.DeleteAllTempFileName();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ namespace System.Application
|
||||
c.DefaultRequestVersion = HttpVersion.Version20;
|
||||
#endif
|
||||
#if NET5_0_OR_GREATER
|
||||
c.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionExact;
|
||||
c.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher;
|
||||
#endif
|
||||
}, configureHandler:
|
||||
#if NETCOREAPP2_1_OR_GREATER
|
||||
|
||||
Reference in New Issue
Block a user