典型场景:找下载,找到了疼讯的旋风链接,但是直接下载龟速,要提速必须下载旋风软件,安装的时候一不小心各种疼讯的其他插件就装进去了。
原理(网上有人分析好了):
个标准的url链接地址,经过了base64编码转换再加上qqdl://这个前缀,就生成了一个旋风下载链接。
我们要做的,就是去掉qqdl://这个前缀,并使用base64解码,即可得到原始的url下载地址。
例如qqdl://aHR0cDovL2Rvd24ucXEuY29tL2xvbC9mdWxsL0xPTF9WMy4xLjUuOF9GVUxMLjd6LjAwMSA=
我们去掉qqdl://这个前缀,得到了aHR0cDovL2Rvd24ucXEuY29tL2xvbC9mdWxsL0xPTF9WMy4xLjUuOF9GVUxMLjd6LjAwMSA=这个字符串,
再进行base64解码,得到了http://down.qq.com/lol/full/LOL_V3.1.5.8_FULL.7z.001 这个下载链接。
解决方案(网上有人做出来了):解码器,需要.net framwork 3.5支持。能解码旋风、迅雷、FLASHGET的链接。 程序我有,但是论坛没法上传。分享代码如下(别人做的,原理很简单):
namespace getDownloadURL
{
class getNormalUrl
{
//获取原始链接地址
public string GetOriginalString(string str)
{
string thunderPrefix = "thunder://";
string qqdlPrefix = "qqdl://";
string flashgetPrefix = "flashget://";
if (str.StartsWith("http://") || str.StartsWith("https://"))
{
return str;
}
else if (str.StartsWith(thunderPrefix))
{
string thunderAddr = str.Substring(thunderPrefix.Length);//去掉前缀
thunderAddr = DecodeBase64(thunderAddr);//base64解码
thunderAddr = thunderAddr.Substring(2, thunderAddr.Length - 4);//去掉前两个A,后两个Z
return thunderAddr;
}
else if (str.StartsWith(qqdlPrefix))
{
string qqdlAddr = str.Substring(qqdlPrefix.Length);
qqdlAddr = DecodeBase64(qqdlAddr);//base64解码
return qqdlAddr;
}
else if (str.StartsWith(flashgetPrefix))
{
string flashgetAddr = str.Substring(flashgetPrefix.Length);
flashgetAddr = flashgetAddr.Substring(0, flashgetAddr.Length - 1);//去掉最后一个&号
flashgetAddr = DecodeBase64(flashgetAddr);
flashgetAddr = flashgetAddr.Substring(10, flashgetAddr.Length - 20);//去掉前后的[FLASHGET]
return flashgetAddr;
}
return "";
}
//将string转换为Base64编码
private string EncodeBase64(string orgStr)
{
try
{
return Convert.ToBase64String(Encoding.Default.GetBytes(orgStr));
}
catch
{
return "";
}
}
//将Base64编码解码为普通string
private string DecodeBase64(string encodeStr)
{
try
{
return Encoding.Default.GetString(Convert.FromBase64String(encodeStr));
}
catch
{
return "";
}
}
}
}
.