|
5 | 5 | using System.Text.Json.Serialization; |
6 | 6 | using System.Text; |
7 | 7 | using System.Security.Cryptography; |
| 8 | +using System.Web; |
8 | 9 |
|
9 | 10 | namespace Pixeval.Extensions.Translators.Baidu.Client; |
10 | 11 | #nullable disable |
@@ -94,30 +95,35 @@ public async Task<BaiduTranslateResult> Translate(string text, string toLanguage |
94 | 95 | /// <param name="salt">设置后将使用传入的随机数</param> |
95 | 96 | /// <param name="sign">设置后将使用传入的签名结果</param> |
96 | 97 | /// <returns></returns> |
97 | | - public async Task<BaiduTranslateResult> Translate(string text, string toLanguage, string fromLanguage = "auto", string salt = "", string sign = "") |
| 98 | + public async Task<BaiduTranslateResult> Translate(string text, string toLanguage, string fromLanguage = "auto") |
98 | 99 | { |
99 | | - // 使用时间戳 |
100 | | - if (string.IsNullOrWhiteSpace(salt)) |
101 | | - { |
102 | | - salt = DateTimeOffset.Now.ToUnixTimeSeconds().ToString(); |
103 | | - } |
104 | | - // 使用MD5加密 |
105 | | - if (string.IsNullOrWhiteSpace(sign)) |
106 | | - { |
107 | | - sign = (_appId + text + salt + _secretKey).MD5(); |
108 | | - } |
109 | | - // 拼接URL |
110 | | - string url = $"{_endpoint}?q={text}&from={fromLanguage}&to={toLanguage}&appid={_appId}&salt={salt}&sign={sign}"; |
111 | | - // 发送请求 |
| 100 | + |
| 101 | + var salt = new Random() |
| 102 | + .NextInt64(10000000000) |
| 103 | + .ToString() |
| 104 | + .PadLeft(10, '0'); |
| 105 | + var sign = BitConverter.ToString( |
| 106 | + MD5.Create().ComputeHash(Encoding.Default.GetBytes( |
| 107 | + _appId + text + salt + _secretKey))) |
| 108 | + .Replace("-", "") |
| 109 | + .ToLower(); |
| 110 | + |
| 111 | + var query = new StringBuilder() |
| 112 | + .Append($"?q={HttpUtility.UrlEncode(text)}") |
| 113 | + .Append($"&from={fromLanguage}") |
| 114 | + .Append($"&to={toLanguage}") |
| 115 | + .Append($"&appid={_appId}") |
| 116 | + .Append($"&salt={salt}") |
| 117 | + .Append($"&sign={sign}") |
| 118 | + .ToString(); |
| 119 | + var url = _endpoint + query; |
| 120 | + |
| 121 | + |
112 | 122 | try |
113 | 123 | { |
114 | 124 | #if NET6_0_OR_GREATER |
115 | 125 | //return await _httpClient.GetFromJsonAsync<BaiduTranslateResult>(url); |
116 | 126 | var response = await _httpClient.GetAsync(url); |
117 | | - var options = new JsonSerializerOptions |
118 | | - { |
119 | | - TypeInfoResolver = SourceGenerationContext.Default, |
120 | | - }; |
121 | 127 | if (response.IsSuccessStatusCode) |
122 | 128 | { |
123 | 129 | var str = await response.Content.ReadAsStringAsync(); |
@@ -265,7 +271,7 @@ public static string MD5(this string str, bool isUpper = false, bool isBig = tru |
265 | 271 | var result = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); |
266 | 272 | var strResult = isBig ? BitConverter.ToString(result) : BitConverter.ToString(result, 4, 8); |
267 | 273 | return isUpper ? strResult.Replace("-", "") : strResult.Replace("-", "").ToLower(); |
268 | | - } |
| 274 | + } |
269 | 275 | } |
270 | 276 |
|
271 | 277 | /// <summary> |
|
0 commit comments