好友
阅读权限10
听众
最后登录1970-1-1
|
wanxu
发表于 2023-3-22 10:56
首先声明文章借鉴 @billsmiless 大佬的 文章地址是:python实现某视频地址的解析及下载(全集下载) - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
看了大佬的文章以后自己研究了一下发现请求一直会403,请求错误
困惑了比较久,刚要放弃但是发现了转机
首先请求的时候要带上Origin这个参数
计算vkey的时候会跳转到圈2的地方,这个地方点击单步会进入keyen
把圈2这个vkey改成圈1这个参数名即可,在计算的时候sign和keyen传递的都是从html中获取的vkey
这样计算出来的值就与发起请求时候的一样了
这是计算的示例,大家自行参考
然后我用C#写了下载的小程序,没有原作者的python写的强,没有多集下载的这一块功能,大家根据需要自己改造把
[C#] 纯文本查看 复制代码 string VideoUrl = "视频url";
Dictionary<string, string> header = new Dictionary<string, string>();
header.Add("UserAgent", "你的UserAgent");
//HttpRequest封装的HttpClient,参数都在外面声明的
string html = await HttpRequest.Get("https://123123.com/?url=" + VideoUrl, header);
// time
var time = Regex.Match(html, "var time = '(.*?)'").ToString();
time = Regex.Match(time, "'(.*?)'").ToString().Replace("'", "");
//vkey
var vkey = Regex.Match(html, "var vkey = '(.*?)'").ToString();
vkey = Regex.Match(vkey, "'(.*?)'").ToString().Replace("'", "");
//计算两个必要参数
//Nuget包:Microsoft.ClearScript.V8
JSHelper jSHelper = new JSHelper(FileHelper.GetApplicationPath("JS\\crypto.js"));
string keyFrom = jSHelper.signV8(vkey);
string vkeyFrom = jSHelper.keyenV8(vkey);
Dictionary<string, string> form = new Dictionary<string, string>();
form.Add("url", VideoUrl);
form.Add("time", time);
form.Add("ua", "0");
form.Add("key", keyFrom);
form.Add("vkey", vkeyFrom);
var content = new FormUrlEncodedContent(form);
header.Add("origin", "https://jx.xmflv.com");
dynamic downJson = (await HttpRequest.Post("https:/123123.com/api.php", content, header)).ConvertTodynamic();
if (downJson.code != "200")
{
throw new Exception("当前接口返回异常!");
}
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Title = "选择保存地址,取消将不保存!";
saveFileDialog.Filter = $"this FileType(*.{downJson.type})|*.{downJson.type}";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = FileHelper.GetDesktopPath();
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
//NuGet包:Downloader 如果不会用的话直接把这行注释了把下面的取消注释
await Task.Run(async () => await DownloadVideoFile.DownloadAsync((string)downJson.url, saveFileDialog.FileName));
//if (!File.Exists(saveFileDialog.FileName))
//{
// using (var web = new WebClient())
// {
// try
// {
// await web.DownloadFileTaskAsync((string)downJson.url, saveFileDialog.FileName);
// }
// catch
// {
// if (File.Exists(saveFileDialog.FileName))
// {
// File.Delete(saveFileDialog.FileName);
// }
// throw;
// }
// }
//}
MessageBox.Show("100% Done");
上述代码借鉴了一些第三方库,代码中已经注明了,可能还需要根据实际大家自行修改一下啦
附上一张运行的软件截图
有啥错误欢迎大家留言指正!
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|