38 lines
1.5 KiB
C#
38 lines
1.5 KiB
C#
using System.Net;
|
|||
|
|
using System.Net.Http;
|
||
|
|
using PCL.Core.App;
|
||
|
|
|
||
|
|
namespace PCL.Network;
|
||
|
|
|
||
|
|
public static class RequestSigning
|
||
|
|
{
|
||
|
|
internal static string SecretCdnSign(string urlWithMark)
|
||
|
|
{
|
||
|
|
if (!urlWithMark.EndsWithF("{CDN}"))
|
||
|
|
return urlWithMark;
|
||
|
|
return urlWithMark.Replace("{CDN}", "").Replace(" ", "%20");
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 设置 Headers 的 UA、Referer。
|
||
|
|
/// </summary>
|
||
|
|
internal static void SecretHeadersSign(string url, ref HttpRequestMessage client, bool useBrowserUserAgent = false,
|
||
|
|
string customUserAgent = "")
|
||
|
|
{
|
||
|
|
client.Version = HttpVersion.Version20;
|
||
|
|
client.VersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
|
||
|
|
if (Uri.TryCreate(url, UriKind.Absolute, out var parsedUri)
|
||
|
|
&& (parsedUri.Host == "api.curseforge.com"
|
||
|
|
|| parsedUri.Host == "edge.forgecdn.net"
|
||
|
|
|| parsedUri.Host == "mediafilez.forgecdn.net"))
|
||
|
|
{
|
||
|
|
client.Headers.Add("x-api-key", Secrets.CurseForgeAPIKey);
|
||
|
|
}
|
||
|
|
var userAgent = !string.IsNullOrEmpty(customUserAgent)
|
||
|
|
? customUserAgent
|
||
|
|
: useBrowserUserAgent
|
||
|
|
? $"PCL2/{ModBase.upstreamVersion}.{ModBase.versionBranchCode} PCLCE/{ModBase.versionStandardCode} Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0"
|
||
|
|
: $"PCL2/{ModBase.upstreamVersion}.{ModBase.versionBranchCode} PCLCE/{ModBase.versionStandardCode}";
|
||
|
|
client.Headers.Add("User-Agent", userAgent);
|
||
|
|
}
|
||
|
|
}
|