/// <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); }