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);
        }
Beispiel #2
0
        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);
        }