using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Net.Http.Headers;
|
using WIDESEA_Core.LogHelper;
|
using System.Security.Cryptography;
|
|
namespace WIDESEA_Core.Helper
|
{
|
public class HttpMesHelper
|
{
|
public static string Post(string serviceAddress, string requestJson = null, string contentType = "application/json", Dictionary<string, string>? headers = null)
|
{
|
string result = string.Empty;
|
DateTime beginDate = DateTime.Now;
|
try
|
{
|
using (HttpContent httpContent = new StringContent(requestJson))
|
{
|
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
|
|
using HttpClient httpClient = new HttpClient();
|
httpClient.Timeout = new TimeSpan(0, 0, 60);
|
long currentTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
|
string key = $"appkey=1830415116987195392×tamp={currentTimestamp}";
|
string authorization = "Open " + GetStr(key);
|
headers = new Dictionary<string, string>
|
{
|
{ "Appkey", "1830415116987195392" },
|
{ "Authorization", authorization },
|
{ "site_tenant_id", "ced19269-2b83-4577-be43-8cc2f700251e" }
|
};
|
if (headers != null)
|
{
|
foreach (var header in headers)
|
httpClient.DefaultRequestHeaders.Add(header.Key, header.Value);
|
}
|
HttpResponseMessage responseMessage = httpClient.PostAsync(serviceAddress, httpContent).Result;
|
result = responseMessage.Content.ReadAsStringAsync().Result;
|
}
|
return result;
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
finally
|
{
|
Logger.Add(serviceAddress, requestJson == null ? "" : requestJson, result, beginDate);
|
}
|
}
|
public static string GetStr(string textToEncrypt)
|
{
|
string publicKey;
|
string privateKey;
|
GenerateRSAKeyPair(out publicKey, out privateKey);
|
byte[] encryptedBytes = RSAEncrypt(textToEncrypt, publicKey);
|
// 可以将加密后的字节数组转换为Base64字符串方便后续处理,例如传输等
|
string encryptedBase64 = Convert.ToBase64String(encryptedBytes);
|
return encryptedBase64;
|
}
|
public static void GenerateRSAKeyPair(out string publicKey, out string privateKey)
|
{
|
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048))
|
{
|
publicKey = rsa.ToXmlString(false);
|
privateKey = rsa.ToXmlString(true);
|
}
|
}
|
public static byte[] RSAEncrypt(string plainText, string publicKey)
|
{
|
byte[] encryptedData;
|
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
|
{
|
rsa.FromXmlString(publicKey);
|
// 将文本转换为UTF8编码的字节数组
|
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
|
// 使用SHA1哈希算法以及Pkcs1填充规则进行加密
|
encryptedData = rsa.Encrypt(plainBytes, true);
|
}
|
return encryptedData;
|
}
|
}
|
}
|