예제 #1
0
        public override CookieContainer GetAllCookies()
        {
            List <Cookie> cookies = new List <Cookie>();

            foreach (string file in GetAllFiles())
            {
                cookies.AddRange(PickCookiesFromFile(file));
            }

            // Expiresが最新のもので上書きする
            cookies.Sort(CompareCookieExpiresAsc);
            CookieContainer container = new CookieContainer();

            foreach (Cookie cookie in cookies)
            {
                try
                {
                    CookieUtil.AddCookieToContainer(container, cookie);
                }
                catch (Exception ex)
                {
                    CookieGetter.Exceptions.Enqueue(ex);
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                }
            }

            return(container);
        }
예제 #2
0
        private CookieContainer GetContainer()
        {
            CookieContainer container = new CookieContainer();

            try
            {
                byte[] CookieData = File.ReadAllBytes(base.CookiePath);
                string CookieText = Encoding.ASCII.GetString(CookieData);       // 08/09
                CookieText = CookieText.Replace("\0", "\t");

                // この正規表現があっていなければCookieの取得もれがあります。
                // niconicoのCookieが取得できるので問題ないかな…
                // 充分な動作確認しておりません。
                for (Match cookieChunk = CookieChunkRegex.Match(CookieText);
                     cookieChunk.Success;
                     cookieChunk = cookieChunk.NextMatch())
                {
                    try
                    {
                        Cookie cookie = new Cookie
                        {
                            Name   = cookieChunk.Groups[1].Value,
                            Value  = cookieChunk.Groups[2].Value,
                            Domain = cookieChunk.Groups[3].Value,
                            Path   = cookieChunk.Groups[4].Value,
                        };

                        try
                        {
                            CookieUtil.AddCookieToContainer(container, cookie);
                        }
                        catch (Exception ex)
                        {
                            CookieGetter.Exceptions.Enqueue(ex);

                            Console.WriteLine(string.Format(
                                                  "Invalid Format! domain:{0},key:{1},value:{2}",
                                                  cookie.Domain, cookie.Name, cookie.Value));
                        }
                    }
                    catch
                    {
                    }
                }
            }
            catch (Exception ex)
            {
                throw new CookieGetterException(
                          "Safariのクッキー取得中にエラーが発生しました。", ex);
            }

            return(container);
        }
예제 #3
0
        public override CookieContainer GetAllCookies()
        {
            if (base.CookiePath == null || !File.Exists(base.CookiePath))
            {
                throw new CookieGetterException(
                          "Operaのクッキーパスが正しく設定されていません。");
            }

            CookieContainer container = new CookieContainer();

            try
            {
                using (FileStream reader = new FileStream(
                           base.CookiePath, FileMode.Open, FileAccess.Read))
                {
                    Header headerData = getHeader(reader);

                    //version check
                    if ((headerData.file_version_number & 0xfffff000) == 0x00001000)
                    {
                        foreach (Cookie cookie in getCookies(headerData, reader))
                        {
                            try
                            {
                                CookieUtil.AddCookieToContainer(container, cookie);
                            }
                            catch (Exception ex)
                            {
                                CookieGetter.Exceptions.Enqueue(ex);

                                Console.WriteLine(string.Format(
                                                      "Invalid Format! domain:{0},key:{1},value:{2}",
                                                      cookie.Domain, cookie.Name, cookie.Value));
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new CookieGetterException(
                          "Operaのクッキー取得でエラーが発生しました。", ex);
            }

            return(container);
        }
예제 #4
0
        /// <summary>
        /// クエリで指定されたクッキーをすべて取得します。
        /// </summary>
        private CookieContainer GetCookies(string query)
        {
            CookieContainer container = new CookieContainer();

            List <List <object> > itemsList = SQLite.GetCookies(CookiePath, query);

            foreach (List <object> items in itemsList)
            {
                Cookie cookie = null;

                try
                {
                    cookie = MakeCookie(items);

                    CookieUtil.AddCookieToContainer(container, cookie);
                }
                catch (Exception ex)
                {
                    Util.ThrowIfFatal(ex);

                    if (cookie == null)
                    {
                        Log.ErrorException(ex,
                                           "Invalid Format cookie!");
                    }
                    else
                    {
                        Log.ErrorException(ex,
                                           "Invalid Format cookie! domain:{0},key:{1},value:{2}",
                                           cookie.Domain, cookie.Name, cookie.Value);
                    }
                }
            }

            return(container);
        }
예제 #5
0
        public override CookieContainer GetAllCookies()
        {
            if (base.CookiePath == null || !File.Exists(base.CookiePath))
            {
                throw new CookieGetterException(
                          "Safariのクッキーパスが正しく設定されていません。");
            }

            CookieContainer container = new CookieContainer();

            // Safari5.1対応 07/30
            if (CheckSafariCookieBinary())
            {
                // 相変わらず仕様がわからないので暫定的にへぼい正規表現でさくっと
                return(GetContainer());  // 08/08
            }

            // Safari5.0.5以下
            try
            {
                XmlReaderSettings settings = new XmlReaderSettings();

                // DTDを取得するためにウェブアクセスするのを抑制する
                // (通信遅延や、アクセスエラーを排除するため)
                settings.XmlResolver = null;
#if CLR_GE_4_0
                settings.DtdProcessing = DtdProcessing.Ignore;
#else
                settings.ProhibitDtd = false;
#endif
                settings.CheckCharacters = false;

                using (XmlReader xtr = XmlTextReader.Create(base.CookiePath, settings))
                {
                    while (xtr.Read())
                    {
                        switch (xtr.NodeType)
                        {
                        case XmlNodeType.Element:
                            if (xtr.Name.ToLower().Equals("dict"))
                            {
                                Cookie cookie = getCookie(xtr);
                                try
                                {
                                    CookieUtil.AddCookieToContainer(container, cookie);
                                }
                                catch (Exception ex)
                                {
                                    CookieGetter.Exceptions.Enqueue(ex);
                                    Console.WriteLine(string.Format(
                                                          "Invalid Format! domain:{0},key:{1},value:{2}",
                                                          cookie.Domain, cookie.Name, cookie.Value));
                                }
                            }
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new CookieGetterException(
                          "Safariのクッキー取得中にエラーが発生しました。", ex);
            }

            return(container);
        }