Exemplo n.º 1
0
        static void Main(string[] args)
        {
start:
            var ps = new ProxySelector();

            while (true)
            {
                if (!UpdateProxySelector(ps))
                {
                    Console.WriteLine("获取代理列表失败,10秒后重试");
                }
                else
                {
                    break;
                }
            }
            var proxy = new NeteaseProxy(ps);

            proxy.StartProxy();
            Console.WriteLine("请设置网易云音乐代理为127.0.0.1,端口15213");
            Console.WriteLine("如果播放失败,按回车切换到下一个代理服务器");
            while (true)
            {
                var aproxy = ps.GetTopProxies(1);
                if (aproxy.Count == 0)
                {
                    Console.WriteLine("没有可用代理,重新搜索");
                    proxy.Stop();
                    goto start;
                }
                Console.WriteLine("现在使用的是:" + aproxy[0]);
                Console.ReadLine();
                ps.RemoveTopProxy();
            }
        }
Exemplo n.º 2
0
        //Modify response
        public async Task OnResponse(object sender, SessionEventArgs e)
        {
            //read response headers
            var responseHeaders = e.WebSession.Response.ResponseHeaders;

            if ((e.WebSession.Request.Method == "GET" || e.WebSession.Request.Method == "POST") && e.WebSession.Response.ResponseStatusCode == "200")
            {
                if (e.WebSession.Response.ContentType != null && e.WebSession.Response.ContentType.Trim().ToLower().Contains("text") || e.WebSession.Request.Url.StartsWith("http://music.163.com/eapi/song/enhance/player/url"))
                {
                    if (e.WebSession.Request.Url.StartsWith("http://music.163.com/eapi/song/enhance/player/url"))
                    {
                        Console.WriteLine("从代理服务器获取歌曲地址");
                        var proxies = ps.GetTopProxies(1);
                        var tasks   = new List <Task <byte[]> >();
                        var st      = new Stopwatch();
                        st.Start();
                        foreach (var proxy in proxies)
                        {
                            tasks.Add(Task <byte[]> .Factory.StartNew(() =>
                            {
                                try
                                {
                                    using (var wc = new ImpatientWebClient())
                                    {
                                        wc.Proxy = new WebProxy(proxy.host, proxy.port);
                                        foreach (var aheader in head)
                                        {
                                            var str = aheader.Key.ToLower();
                                            if (str == "host" || str == "content-length" || str == "accept" || str == "user-agent" || str == "connection")
                                            {
                                                continue;
                                            }
                                            wc.Headers.Add(aheader.Key, aheader.Value.Value);
                                        }
                                        var ret = wc.UploadData(e.WebSession.Request.Url, body);
                                        return(ret);
                                    }
                                }
                                catch (Exception) { }
                                return(new byte[0]);
                            }));
                        }
                        var idx = Task.WaitAny(tasks.ToArray());
                        st.Stop();
                        await e.SetResponseBody(tasks[idx].Result);

                        Console.WriteLine("修改完成,用时 " + st.ElapsedMilliseconds + " ms");
                    }
                    else if (e.WebSession.Request.Url.StartsWith("http://music.163.com/eapi/"))
                    {
                        var body = await e.GetResponseBodyAsString();

                        if (Regex.Match(body, "\"st\":-\\d+").Success)
                        {
                            Console.WriteLine("替换歌曲列表信息");
                            body = Regex.Replace(body, "\"st\":-\\d+", "\"st\":0");
                            body = body.Replace("\"pl\":0", "\"pl\":320000");
                            body = body.Replace("\"dl\":0", "\"dl\":320000");
                            await e.SetResponseBodyString(body);
                        }
                    }
                }
            }
        }