127 lines
4.3 KiB
C#
127 lines
4.3 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 快站短网址
|
||
/// </summary>
|
||
public class KuaiZhanShort
|
||
{
|
||
/// <summary>
|
||
/// 快站缩短
|
||
/// </summary>
|
||
/// <param name="url"></param>
|
||
/// <returns></returns>
|
||
public static string GetShort(string url)
|
||
{
|
||
try
|
||
{
|
||
var APP_KEY = "LFxURPXd0Qy3";
|
||
var APP_SECRET = "94e50cce6317fa27360247e64e7ae48149a04b88";
|
||
var pams = new Dictionary<string, string>();
|
||
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)
|
||
{
|
||
CacheTool.GetSingleObj().Set("KZShortUrl", "", (int)(DateTime.Now.AddDays(1).AddMinutes(5) - DateTime.Now).TotalMinutes);
|
||
EventClient.OnEvent("短连接", "由于快站短连接接口请求的额度超限制,正在切换其他短连接");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{ }
|
||
return url;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 计算快站的sign
|
||
/// </summary>
|
||
/// <param name="pams"></param>
|
||
/// <param name="secret"></param>
|
||
/// <returns></returns>
|
||
private static String signTopRequest(Dictionary<String, String> pams, String secret)
|
||
{
|
||
// 第一步:检查参数是否已经排序
|
||
IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(pams, StringComparer.Ordinal);
|
||
|
||
// 第二步:把所有参数名和参数值串在一起
|
||
var query = new StringBuilder();
|
||
query.Append(secret);
|
||
|
||
foreach (KeyValuePair<string, string> 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());
|
||
}
|
||
|
||
/// <summary>
|
||
/// MD5加密方法写法
|
||
/// </summary>
|
||
/// <param name="str">参数字符串</param>
|
||
/// <returns></returns>
|
||
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();
|
||
}
|
||
|
||
|
||
}
|
||
}
|