zoukankan      html  css  js  c++  java
  • C#抖音地址解析获取水印地址

    源码下载:DEMO下载

    首先我们可以看到手机上的APP播放的视频是没有水印的,如下:

    这样我们可以用Charles之类的工具抓取该地址,主要观看他的前缀地址部分(由于配置比较麻烦,大家可以自行配置,参看https://www.jianshu.com/p/c422344798c5,手机上的应用都可以抓取)

    会发现播放地址是这样的:https://aweme.snssdk.com/aweme/v1/play/........

    第二步:点击分享,复制地址,得到链接 https://v.douyin.com/7SUFkb/

    第三步:我们使用谷歌浏览器访问(方便调试)

    第四步:我们右键查看源码,会发现下图的地址

    第五步:我们切换浏览器为手机模式,然后在看源码变化(我们会拿到第一步播放地址的关键部分参数),这一步只是为了验证PC浏览器模式和手机浏览模式的源码是不一样的。

    第六步:在一次验证,我们访问第四步拿到地址(https://aweme.snssdk.com/aweme/v1/playwm/?s_vid=93f1b41336a8b7a442dbf1c29c6bbc562f1d6ac08e2f68576e6a34ac31a6790e5502ca4913dc07a83eabc3d41484e8ac7f43878815a424e99ceca999c77d5265&line=0),是可以得到视频源的,但是有水印,如下:

    第七步:对比第一步(手机)和第四步(PC)拿到的地址,发现其地址playwm和play的变化,然后替换一下访问 https://aweme.snssdk.com/aweme/v1/play/?s_vid=93f1b41336a8b7a442dbf1c29c6bbc562f1d6ac08e2f68576e6a34ac31a6790e5502ca4913dc07a83eabc3d41484e8ac7f43878815a424e99ceca999c77d5265&line=0

    得到无水印地址(提示:经验证这里得用浏览器的手机模式,pc模式无法访问

    经过上面几步,从第二步开始,抖音地址就经过了几次重定向才拿到真实的数据源地址

    下面是C#实现的代码:

     /// <summary>
            /// 抖音
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            public string DouYin(string url)
            {
                var webHtml = VideoHelper.GetWebContent(url, 0);
                var webArr1 = Regex.Split(webHtml, "playAddr: "", RegexOptions.IgnoreCase);
                var webArr2 = Regex.Split(webArr1[1], "",", RegexOptions.IgnoreCase);
                var playAddr = webArr2[0].Replace("playwm", "play");
                var payUrl = VideoHelper.GetMapUrl(playAddr, 1);
                return payUrl;
            }
    /// <summary>
            /// 获取页面html
            /// </summary>
            /// <param name="Url">页面路径</param>
            /// <param name="type">浏览器类型(0PC/1手机)</param>
            /// <returns></returns>
            public static string GetWebContent(string Url, int type = 0)
            {
                string strResult = "";
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                    //声明一个HttpWebRequest请求 
                    request.Method = "POST";
                    var UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.861.0 Safari/535.2";
                    if (type > 0)
                    {//模拟手机浏览器
                        UserAgent = "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
                    }
                    request.UserAgent = UserAgent;
    
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                    strResult = sr.ReadToEnd();
                    response.Close();
                }
                catch
                {
                    Console.WriteLine("出错");
                }
                return strResult;
            }
    
    
            /// <summary>
            /// 获取重定向地址
            /// </summary>
            /// <param name="Url">原地址</param>
            /// <param name="type">浏览器类型(0PC/1手机)</param>
            /// <returns></returns>
            public static string GetMapUrl(string Url, int type = 0)
            {
                string strResult = "";
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                    request.Method = "POST";
                    var UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.861.0 Safari/535.2";
                    if (type > 0)
                    {//模拟手机浏览器
                        UserAgent = "Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
                    }
                    request.UserAgent = UserAgent;
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
                    using (WebResponse response = request.GetResponse())
                    {
                        strResult = response.Headers["Location"];      //重定向地址
                    }
    
    
                }
                catch
                {
                    Console.WriteLine("出错");
                }
                return strResult;
            }

    源码下载:DEMO下载

  • 相关阅读:
    七、Struts2之文件上传与下载
    八、Struts2之OGNL
    五、Struts2之类型转换
    wpf坐标转换相关
    wpf拖拽封装类
    获取Bitmap的Graphics
    Win32定时器
    vs2010调试dll
    使用GDI+ 保存HDC为位图文件
    在c++中使用.net
  • 原文地址:https://www.cnblogs.com/boyzi/p/12560622.html
Copyright © 2011-2022 走看看