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下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM