表題の通りです。
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プロジェクトが該当のソースになります。
それではまた!