Example #1
0
            /// <summary>
            ///
            /// </summary>
            /// <returns></returns>
            private System.Net.CookieCollection GetCookieCollectionInternal(string query)
            {
                //使用中でロックが掛かっている可能性があるため、一旦コピー。
                var tempFile = new TempFileProvider();

                System.IO.File.Copy(Path, tempFile.Path, true);

                var collection = new CookieCollection();

                System.Data.DataTable dt = null;
                using (var conn = SQLiteHelper.CreateConnection(tempFile.Path))
                {
                    conn.Open();
                    dt = SQLiteHelper.ExecuteReader(conn, query);
                }

                if (dt != null)
                {
                    var cc = new CookieContainer();
                    foreach (System.Data.DataRow row in dt.Rows)
                    {
                        //カラム名
                        //id,baseDomain,appId,inBrowserElement,name,value,host,path,expiry,lastAccessed,creationTime,isSecure,isHttpOnly
                        var value = row["value"].ToString();

                        //FRESH!で不具合のためコメントアウト。
                        //if (value != null)
                        //    value = Uri.EscapeDataString(value);
                        var name    = row["name"].ToString();
                        var host    = row["host"].ToString();
                        var path    = row["path"].ToString();
                        var expires = long.Parse(row["expiry"].ToString());
                        var cookie  = new Cookie(name, value, path, host)
                        {
                            //TODO:expiresは弄らずにそのまま変換して大丈夫だろうか。正しい値を取得できているか確認していない。
                            Expires = Tools.FromUnixTime(expires)
                        };

                        try
                        {
                            //CookieContainerに追加できないようなサイズの大きいvalueが存在したため、適合していることをチェックする。
                            //適合しなかったら例外が投げられ、追加しない。
                            cc.Add(cookie);
                            collection.Add(cookie);
                        }
                        catch (CookieException) { }
                    }
                }
                return(collection);
            }
            private System.Net.CookieCollection GetCookieCollectionInternal(string query)
            {
                System.Data.DataTable dt = null;
                using (var tempFile = new TempFileProvider())
                {
                    try
                    {
                        System.IO.File.Copy(Path, tempFile.Path, true);
                    }
                    catch (System.IO.FileNotFoundException ex)
                    {
                        var str = "";
                        try
                        {
                            var defaultDir  = System.IO.Path.GetDirectoryName(Path);
                            var userDataDir = System.IO.Directory.GetParent(defaultDir);
                            if (System.IO.Directory.Exists(userDataDir.FullName))
                            {
                                str = GetFiles(userDataDir.FullName);
                            }
                        }
                        catch (Exception)
                        {
                            str = "(error)";
                        }
                        throw new ChromeCookiesFileNotFoundException(str, ex);
                    }
                    using (var conn = SQLiteHelper.CreateConnection(tempFile.Path))
                    {
                        dt = SQLiteHelper.ExecuteReader(conn, query);
                    }
                }
                var collection = new CookieCollection();

                if (dt != null)
                {
                    var cc = new CookieContainer();
                    foreach (System.Data.DataRow row in dt.Rows)
                    {
                        var value = row["value"].ToString();
                        if (string.IsNullOrEmpty(value))//暗号化してるっぽいから復号化してみる。
                        {
                            var encrypted_value = (byte[])row["encrypted_value"];
                            value = UnProtect(encrypted_value);
                        }
                        //ここでURLエンコードをやると、ふわっちでAPIが取得できなかった。ここではやるべきではないのかも。
                        //if (value != null)
                        //    value = Uri.EscapeDataString(value);
                        var name        = row["name"].ToString();
                        var host_key    = row["host_key"].ToString();
                        var path        = row["path"].ToString();
                        var expires_utc = long.Parse(row["expires_utc"].ToString());
                        var cookie      = new Cookie(name, value, path, host_key)
                        {
                            //TODO:expires_utcの変換はこれで大丈夫だろうか。正しい値を取得できているか確認していない。
                            Expires = Tools.FromUnixTime(expires_utc / 1000000L - 11644473600L),
                        };
                        try
                        {
                            //CookieContainerに追加できないようなサイズの大きいvalueが存在したため、適合していることをチェックする。
                            //適合しなかったら例外が投げられ、追加しない。
                            cc.Add(cookie);
                            collection.Add(cookie);
                        }
                        catch (CookieException) { }
                    }
                }
                return(collection);
            }