Update Utility.Http.cs

This commit is contained in:
Alex-Rachel
2025-03-18 00:24:54 +08:00
parent 5e6d98764c
commit 81a794cff3

View File

@@ -1,6 +1,8 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking;
@@ -14,6 +16,103 @@ namespace TEngine
/// </summary>
public static class Http
{
/// <summary>
/// GET请求与获取结果。
/// </summary>
/// <param name="url">网络URL。</param>
/// <param name="timeout">超时时间。</param>
/// <returns>请求结果。</returns>
public static async UniTask<string> Get(string url, float timeout = 5f)
{
var cts = new CancellationTokenSource();
cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout));
using UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
return await SendWebRequest(unityWebRequest, cts);
}
/// <summary>
/// Post请求与获取结果.
/// </summary>
/// <param name="url">网络URL。</param>
/// <param name="postData">Post数据。</param>
/// <param name="timeout">超时时间。</param>
/// <returns>请求结果。</returns>
public static async UniTask<string> Post(string url, string postData, float timeout = 5f)
{
var cts = new CancellationTokenSource();
cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout));
using UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, postData);
return await SendWebRequest(unityWebRequest, cts);
}
/// <summary>
/// Post请求与获取结果.
/// </summary>
/// <param name="url">网络URL。</param>
/// <param name="formFields">Post数据。</param>
/// <param name="timeout">超时时间。</param>
/// <returns>请求结果。</returns>
public static async UniTask<string> Post(string url, Dictionary<string, string> formFields, float timeout = 5f)
{
var cts = new CancellationTokenSource();
cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout));
using UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, formFields);
return await SendWebRequest(unityWebRequest, cts);
}
/// <summary>
/// Post请求与获取结果.
/// </summary>
/// <param name="url">网络URL。</param>
/// <param name="formData">Post数据。</param>
/// <param name="timeout">超时时间。</param>
/// <returns>请求结果。</returns>
public static async UniTask<string> Post(string url, WWWForm formData, float timeout = 5f)
{
var cts = new CancellationTokenSource();
cts.CancelAfterSlim(TimeSpan.FromSeconds(timeout));
using UnityWebRequest unityWebRequest = UnityWebRequest.Post(url, formData);
return await SendWebRequest(unityWebRequest, cts);
}
/// <summary>
/// 抛出网络请求。
/// </summary>
/// <param name="unityWebRequest">UnityWebRequest。</param>
/// <param name="cts">CancellationTokenSource。</param>
/// <returns>请求结果。</returns>
public static async UniTask<string> SendWebRequest(UnityWebRequest unityWebRequest, CancellationTokenSource cts)
{
try
{
var (isCanceled, _) = await unityWebRequest.SendWebRequest().WithCancellation(cts.Token).SuppressCancellationThrow();
if (isCanceled)
{
Log.Warning($"HttpPost {unityWebRequest.url} be canceled!");
unityWebRequest.Dispose();
return string.Empty;
}
}
catch (OperationCanceledException ex)
{
if (ex.CancellationToken == cts.Token)
{
Log.Warning("HttpPost Timeout");
unityWebRequest.Dispose();
return string.Empty;
}
}
string ret = unityWebRequest.downloadHandler.text;
unityWebRequest.Dispose();
return ret;
}
/// <summary>
/// 发起HTTP GET请求。
/// </summary>
@@ -79,7 +178,7 @@ namespace TEngine
}
#region Private Coroutine Implementations
/// <summary>
/// GET请求协程实现。
/// </summary>
@@ -117,6 +216,7 @@ namespace TEngine
{
texture2D = downloadTexture.texture;
}
actionResult?.Invoke(texture2D);
}
@@ -159,8 +259,8 @@ namespace TEngine
bool flag = uwr.result == UnityWebRequest.Result.Success;
actionResult?.Invoke(flag);
}
#endregion
}
}
}
}