TapCommon-Unity/Runtime/Internal/Http/TapHttpUtils.cs

83 lines
3.1 KiB
C#
Raw Normal View History

2023-09-20 15:58:03 +08:00
using System;
using System.Linq;
using System.Text;
using System.Collections.Specialized;
using System.Net.Http;
namespace TapTap.Common.Internal.Http {
public class TapHttpUtils {
public static void PrintRequest(HttpClient client, HttpRequestMessage request, string content = null) {
if (TapLogger.LogDelegate == null) {
return;
}
if (client == null) {
return;
}
if (request == null) {
return;
}
StringBuilder sb = new StringBuilder();
sb.AppendLine("=== HTTP Request Start ===");
sb.AppendLine($"URL: {request.RequestUri}");
sb.AppendLine($"Method: {request.Method}");
sb.AppendLine($"Headers: ");
foreach (var header in client.DefaultRequestHeaders) {
sb.AppendLine($"\t{header.Key}: {string.Join(",", header.Value.ToArray())}");
}
foreach (var header in request.Headers) {
sb.AppendLine($"\t{header.Key}: {string.Join(",", header.Value.ToArray())}");
}
if (request.Content != null) {
foreach (var header in request.Content.Headers) {
sb.AppendLine($"\t{header.Key}: {string.Join(",", header.Value.ToArray())}");
}
}
if (!string.IsNullOrEmpty(content)) {
sb.AppendLine($"Content: {content}");
}
sb.AppendLine("=== HTTP Request End ===");
TapLogger.Debug(sb.ToString());
}
public static void PrintResponse(HttpResponseMessage response, string content = null) {
if (TapLogger.LogDelegate == null) {
return;
}
StringBuilder sb = new StringBuilder();
sb.AppendLine("=== HTTP Response Start ===");
sb.AppendLine($"URL: {response.RequestMessage.RequestUri}");
sb.AppendLine($"Status Code: {response.StatusCode}");
if (!string.IsNullOrEmpty(content)) {
sb.AppendLine($"Content: {content}");
}
sb.AppendLine("=== HTTP Response End ===");
TapLogger.Debug(sb.ToString());
}
public static NameValueCollection ParseQueryString(string queryString)
{
if (queryString == null) {
throw new ArgumentNullException("queryString");
}
if (queryString.Length > 0 && queryString[0] == '?') {
queryString = queryString.Substring(1);
}
NameValueCollection queryParameters = new NameValueCollection();
string[] querySegments = queryString.Split('&');
foreach(string segment in querySegments)
{
string[] parts = segment.Split('=');
if (parts.Length > 0)
{
string key = parts[0].Trim(new char[] { '?', ' ' });
string val = parts[1].Trim();
queryParameters.Add(key, val);
}
}
return queryParameters;
}
}
}