using CsharpHttpHelper; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace Api.Framework.Tools { /// /// 快站短网址 /// public class KuaiZhanShort { /// /// 快站缩短 /// /// /// public static string GetShort(string url) { try { var APP_KEY = "LFxURPXd0Qy3"; var APP_SECRET = "94e50cce6317fa27360247e64e7ae48149a04b88"; var pams = new Dictionary(); pams.Add("url", url); pams.Add("appKey", APP_KEY); pams.Add("urlType", "default"); var sign = signTopRequest(pams, APP_SECRET); pams.Add("sign", sign); var Postdata = HttpExtend.BuildQuery(pams); var http = new HttpHelper(); var item = new HttpItem() { URL = "https://cloud.kuaizhan.com/api/v1/tbk/genShortUrl", Method = "post", IsToLower = false, Cookie = "", Referer = "", Postdata = Postdata, Timeout = 100000, ReadWriteTimeout = 30000, UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", ContentType = "application/x-www-form-urlencoded", Allowautoredirect = false, ProxyIp = "" }; var result = http.GetHtml(item); //{"code":200,"msg":"ok","data":{"shortUrl":"http://kzurl07.cn/tbKy"}} var jobj = JObject.Parse(result.Html); if (jobj != null) { if ((int)jobj["code"] == 200) { var data = (JObject)jobj["data"]; return data["shortUrl"].ToString(); } else if ((int)jobj["code"] == 1001) { EventClient.OnEvent("短连接", "由于快站短连接接口请求的额度超限制,正在切换其他短连接"); } } else { } } catch (Exception ex) { } return url; } /// /// 计算快站的sign /// /// /// /// private static String signTopRequest(Dictionary pams, String secret) { // 第一步:检查参数是否已经排序 IDictionary sortedParams = new SortedDictionary(pams, StringComparer.Ordinal); // 第二步:把所有参数名和参数值串在一起 var query = new StringBuilder(); query.Append(secret); foreach (KeyValuePair kv in sortedParams) { if (!string.IsNullOrEmpty(kv.Key) && !string.IsNullOrEmpty(kv.Value) && "sign" != kv.Key) query.Append(kv.Key).Append(kv.Value); } query.Append(secret); var ss = query.ToString(); // 第三步:使用MD5加密 return GetMd5(query.ToString()); } /// /// MD5加密方法写法 /// /// 参数字符串 /// private static string GetMd5(string str) { MD5 md5 = MD5.Create(); byte[] ba = Encoding.Default.GetBytes(str); byte[] md55 = md5.ComputeHash(ba); StringBuilder sb = new StringBuilder(); for (int I = 0; I < md55.Length; I++) { sb.Append(md55[I].ToString("x2")); } return sb.ToString(); } } }