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(); } }
//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); } } } } }