2023年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

 

« IEのCookieを取得する方法 | トップページ | IEのCookieを取得する方法:おかわり 三杯目 »

2008年8月27日 (水)

IEのCookieを取得する方法:おかわり

昨日の続き。

InternetGetCookieEx()を実行してみたのだが、何も取れなかった。戻り値はfalse。つまり関数実行はエラーとなっているということである。C#版のGetLastError()であるMarshal.GetLastWin32Error()を実行してみたら、ブレークポイントをかけないと0、かけてチマチマ実行すると1008(ERROR_NO_TOKEN)となる。なぜ違いがでるのかわからない・・・。

Windows XP Professional上で実行してみると、InternetGetCookie()の方は、指定したURLに設定してあるCookieが(たぶん)すべて取れた。でもInternetGetCookieEx()の方は、何も取れない。
試しにWindows Vista Home Premium上で管理者権限で実行してみても、普通にVista上で実行したのとおなじ結果だった。
わけわからない。

定義は以下のようにしてみたのだが間違いがあるのだろうか?(C#)

第6引数がLPVOIDなのだけど、予約なのでnullを設定するようにとあったので、refをつけずにIntPtrにしてみた。これが悪いのか?LPVOIDをC#で使う例題ではref IntPtrだったけど、refがついているとnullは設定できないし・・・。

        [DllImport("wininet.dll")]
        private extern static
            bool InternetGetCookieEx(string pchURL, string pchCookieName,
                                   StringBuilder pchCookieData, ref uint pcchCookieData, uint dwFlags, IntPtr lpReserved);

        enum GETCOOKIEEX_FLAGS {
            INTERNET_COOKIE_THIRD_PARTY = 0x10,
            INTERNET_FLAG_RESTRICTED_ZONE = 0x00020000
        }

        // IEが利用しているCookieを取ってくる
        public string getIECookieEx(string url, String key)
        {
            string result = "";
            StringBuilder cookieData = new StringBuilder(new String(' ', 4096), 4096);

            uint size = (uint)cookieData.Length;
            uint dwflag = (int)GETCOOKIEEX_FLAGS.INTERNET_COOKIE_THIRD_PARTY;
            bool bResult = InternetGetCookieEx(url, key, cookieData, ref size, dwflag, (IntPtr)null);

            if (size > 4096)
            {
                cookieData.Capacity = (int)size;
                bResult = InternetGetCookieEx(url, key, cookieData, ref size, dwflag, (IntPtr)null);
            }

            if (bResult)
            {
                result = cookieData.ToString();
            }
            else
            {
                result = "ERROR[" + Marshal.GetLastWin32Error().ToString() + "]";
            }

            return result;
        }

nico2mobileはVista上でもIEのCookieを流用できているのだから、何らかの方法でIEのCookieを取得できるはずなのだが・・・。
他の方法が見当たらない。

→2008/09/07追記:C#でCookieを取得するプログラムを作ったよ。

« IEのCookieを取得する方法 | トップページ | IEのCookieを取得する方法:おかわり 三杯目 »

コメント

bool bResult = InternetGetCookieEx(url, key, cookieData, ref size, dwflag, IntPtr.Zero);

じゃだめですか?
試してないですけど。

ども、炬燵犬です。Vistaで試してみましたが、ダメでしたね。
まったく同じです・・・。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: IEのCookieを取得する方法:おかわり:

« IEのCookieを取得する方法 | トップページ | IEのCookieを取得する方法:おかわり 三杯目 »