public static RawBrowserMessageEnvelop Deserialize(BinaryReader r) { var e = new RawBrowserMessageEnvelop { }; e.MessageType = StreamHelper.ReadString(r); if (r.ReadBoolean()) { e.Message = new(); e.Message.Url = StreamHelper.ReadString(r); e.Message.File = StreamHelper.ReadString(r); e.Message.Method = StreamHelper.ReadString(r); e.Message.RequestBody = StreamHelper.ReadString(r); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict1); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict2); StreamHelper.ReadStateCookies(r, out Dictionary <string, string> dict3); e.Message.RequestHeaders = dict1; e.Message.ResponseHeaders = dict2; e.Message.Cookies = dict3; } var count = r.ReadInt32(); e.VideoIds = new string[count]; for (int i = 0; i < count; i++) { e.VideoIds[i] = r.ReadString(); } if (r.ReadBoolean()) { count = r.ReadInt32(); var list = new RawBrowserMessage[count]; for (int i = 0; i < count; i++) { var message = new RawBrowserMessage(); message.Url = StreamHelper.ReadString(r); message.File = StreamHelper.ReadString(r); message.Method = StreamHelper.ReadString(r); message.RequestBody = StreamHelper.ReadString(r); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict1); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict2); StreamHelper.ReadStateCookies(r, out Dictionary <string, string> dict3); message.RequestHeaders = dict1; message.ResponseHeaders = dict2; message.Cookies = dict3; list[i] = message; } e.Messages = list; } return(e); }
internal static Message Parse(RawBrowserMessage rawMessage) { var message = new Message { File = GetFileName(rawMessage.File), Url = rawMessage.Url, RequestMethod = rawMessage.Method ?? "GET", RequestBody = rawMessage.RequestBody }; var cookies = new List <string>(); if (rawMessage.RequestHeaders != null && rawMessage.RequestHeaders.Count > 0) { foreach (var key in rawMessage.RequestHeaders.Keys) { if (string.IsNullOrEmpty(key)) { continue; } if (key.Equals("cookie", StringComparison.InvariantCultureIgnoreCase)) { cookies.AddRange(rawMessage.RequestHeaders[key]); } var invalidHeader = IsBlockedHeader(key); if (key.Equals("content-type", StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(rawMessage.RequestBody)) { invalidHeader = false; } if (!invalidHeader) { message.RequestHeaders.Add(key, rawMessage.RequestHeaders[key]); } } } var cookieSet = new HashSet <string>(); foreach (var cookie in cookies) { foreach (var item in cookie.Split(';')) { var value = item.Trim(); if (!string.IsNullOrEmpty(value)) { cookieSet.Add(value); } } } if (rawMessage.ResponseHeaders != null && rawMessage.ResponseHeaders.Count > 0) { foreach (var key in rawMessage.ResponseHeaders.Keys) { if (!string.IsNullOrEmpty(key)) { message.ResponseHeaders.Add(key, rawMessage.ResponseHeaders[key]); } } } if (rawMessage.Cookies != null && rawMessage.Cookies.Count > 0) { foreach (var key in rawMessage.Cookies.Keys) { if (!string.IsNullOrEmpty(key)) { cookieSet.Add(key + "=" + rawMessage.Cookies[key]); } } } if (cookieSet.Count > 0) { message.Cookies.Add("Cookie", Helpers.MakeCookieString(cookieSet)); } if (!message.RequestHeaders.ContainsKey("User-Agent") && message.ResponseHeaders.ContainsKey("realUA")) { message.ResponseHeaders["User-Agent"] = message.ResponseHeaders["realUA"]; } return(message); }