nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

WPFのWebBrowserでHttpOnlyなクッキーを取得する

表題の通りです。
WebBrowserクラスのDocumentクラスから取得すると、通常のクッキーは取得できても、HttpOnly属性のついているクッキーは取得できません。
本エントリーではその方法を説明します。

方法は簡単で、wininet.dllのInternetGetCookieExを利用して取得します。
コードは以下のような感じです。

        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref uint pcchCookieData, int dwFlags, IntPtr lpReserved);
        
        private void WebBrowser_Navigated(object sender, NavigationEventArgs e)
        {
            uint length = 1024;
            StringBuilder cookieData = new StringBuilder((int)length);
            bool result = InternetGetCookieEx(
                               e.Uri.AbsoluteUri,
                               null,
                               cookieData,
                               ref length,
                               INTERNET_COOKIE_HTTPONLY,
                               IntPtr.Zero);
            if (result && 0 < cookieData.Length)
            {
                cookieValueLabel.Content = cookieData.ToString();
            }

        }

結構簡単ですね。
一応実際に動くコードをGithubにも公開しておきますので、良かったら参考にどうぞ。
WebBrowserSampleソリューション内の、CookieAccessibleBrowserプロジェクトが該当のソースになります。

github.com

それではまた!