using Newtonsoft.Json.Linq; using System.Diagnostics; using System.Net; using System.Net.Http; namespace Zerolauncher.Manager { internal class LoginManager { //private static readonly HttpClient client = new HttpClient(); public static async Task SendPostRequest() { var client = new HttpClient(); client.DefaultRequestVersion = HttpVersion.Version20; client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower; var values = new Dictionary { { "thing1", "hello" }, { "thing2", "world" } }; var content = new FormUrlEncodedContent(values); var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content); var responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString); } public static async Task LoginTest() { var client = new HttpClient(); client.DefaultRequestVersion = HttpVersion.Version20; client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower; var values = new Dictionary { { "thing1", "hello" }, { "thing2", "world" } }; var content = new FormUrlEncodedContent(values); var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content); var responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString); } public static async Task AssetNet(HttpClient client, SingleGame game, string url, FormUrlEncodedContent? content =null) { try { var response = content != null? await client.PostAsync(url, content): await client.GetAsync(url); game.Send($"{StaticHandleS.HintText} response.StatusCode{response.StatusCode}"); return await response.Content.ReadAsStringAsync(); } catch (Exception ex) { game.Send($"{StaticHandleS.HintText} 网络发生错误,类型:{ex.GetType().Name},消息:{ex.Message}"); return null; } } public static async Task DoLogin(SingleGame game) { var client = new HttpClient(); client.DefaultRequestVersion = HttpVersion.Version20; client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower; client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"); string? need_web = null; client.Timeout = TimeSpan.FromSeconds(3); game.Send($"{StaticHandleS.HintText} 尝试登玩家{game.account.nickName}到{ServicesStaticInfo.ServicesName[game.account.providerId]}的{game.account.serverId}服"); switch (game.account.providerId) { case 0: need_web = $"http://web.4399.com/stat/togame.php?target=ddt&server_id=S{game.account.serverId}"; { var values = new Dictionary { { "loginFrom", "uframe" }, { "postLoginHandler", "default" }, { "layoutSelfAdapting", "true" }, { "externalLogin", "qq" }, { "displayMode", "popup" }, { "layout", "vertical" }, { "appId", "www_home" }, { "mainDivId", "popup_login_div" }, { "includeFcmInfo", "false" }, { "userNameLabel", "4399用户名" }, { "userNameTip", "请输入4399用户名" }, { "welcomeTip", "欢迎回到4399" }, { "username", game.account.userName }, { "password", game.account.userPWD } }; var responseString = await AssetNet(client, game, "http://ptlogin.4399.com/ptlogin/login.do?v=1", new FormUrlEncodedContent(values)); // eventHandles.__errorCallback('密码错误'); if (responseString == null) break; if (responseString.Contains("eventHandles.__errorCallback")) { game.Send($"{StaticHandleS.HintText} 登录异常:{responseString.Split("eventHandles.__errorCallback('")[1].Split("'")[0]}"); break; } if (!game.Send($"{StaticHandleS.HintText} 登录成功,开始解析iframe")) return; } { var responseString = await AssetNet(client, game, $"http://web.4399.com/stat/togame.php?target=ddt&server_id=S{game.account.serverId}"); if (responseString == null) break; if (!responseString.Contains("name=\"game_box\"")) { game.Send($"{StaticHandleS.HintText} 解析异常:服务器返回数据不正确"); break; } responseString = responseString.Split("name=\"game_box\"")[1].Split("src=\"")[1].Split("\"")[0]; HttpResponseMessage response; try { response = await client.PostAsync(responseString, null); } catch (Exception ex) { game.Send($"{StaticHandleS.HintText} 网络发生错误,类型:{ex.GetType().Name.Replace(" ", "_")},消息:{ex.Message.Replace(" ", "_")}"); break; } responseString = await response.Content.ReadAsStringAsync(); responseString = "http://" + response.RequestMessage.RequestUri.ToString().Split("/")[2] + "/" + responseString.Split("movie\" value='")[1].Split("'")[0]; //Trace.WriteLine(responseString); game.Send($"{StaticHandleS.GameSa} {responseString}"); } need_web = null ; break; case 1: need_web = $"http://web.7k7k.com/games/togame.php?target=ddt_7&server_id={game.account.serverId}"; { var values = new Dictionary { { "username", game.account.userName }, { "password", game.account.userPWD }, {"auto", "1" }, {"formtype", "index_log" } }; var responseString = await AssetNet(client, game, "https://web.7k7k.com/source/Post.php", new FormUrlEncodedContent(values)); if (responseString == null) break; //game.Send($"{StaticHandleS.HintText} {responseString}"); JObject jsonObj = JObject.Parse(responseString); game.Send($"{StaticHandleS.HintText} {jsonObj["info"]}"); if ((int)jsonObj["status"] != 1) break; if (!game.Send($"{StaticHandleS.HintText} 登录成功,开始解析iframe")) return; } { HttpResponseMessage response; try { response = await client.GetAsync(need_web); } catch (Exception ex) { game.Send($"{StaticHandleS.HintText} 网络发生错误,类型:{ex.GetType().Name.Replace(" ", "_")},消息:{ex.Message.Replace(" ", "_")}"); break; } var responseString = await response.Content.ReadAsStringAsync(); Trace.WriteLine(responseString); responseString = "http://" + response.RequestMessage.RequestUri.ToString().Split("/")[2] + "/" + responseString.Split("movie\" value='")[1].Split("'")[0]; //Trace.WriteLine(responseString); game.Send($"{StaticHandleS.GameSa} {responseString}"); } break; case 2: need_web = $"http://www.wan.com/game/play/id/{game.account.serverId}"; break; default: game.Send($"{StaticHandleS.HintText} 错误。未适配的运营商:{game.account.serverId}"); break; } game.Send($"{StaticHandleS.HintText} need web{need_web}"); client.Dispose(); if (need_web == null) return; for (int i = 6; i > 0; i--) { await Task.Delay(1000); if (!game.Send($"{StaticHandleS.HintText} 自动登录失败,将在{i}后启用网页登录,关闭窗口取消")) { return; } } game.Send($"{StaticHandleS.UseBrowser} {need_web}"); } } }