Internet Explorerのクッキーをこんがりと

SharpHeaderCookieで書いたInternet ExplorerのCookieValueを取得するC#のソースです。windows10になりましてEdgeがWindows標準のウェブブラウザとなってもう需要がなさそう……


CookieGetterSharpに実装した当初は動いてたけれどバージョンアップとかの際にいじってたら動かなくなってたのを数日かけて動くようになったへっぽこソースがこちら


Tridentのクッキー取得ソース




/// <summary>
/// IEノーマルのCookieValueを取得します。
/// </summary>
/// <param name="uri"></param>
/// <param name="id"></param>
/// <returns></returns>
public static string GetWin32ApiTridentCookie(Uri uri, string id = null) {

uint lpdwSize = 0;
StringBuilder lpszCookieData = new StringBuilder();

Win32Api.InternetGetCookieEx(uri.OriginalString, id, lpszCookieData, ref lpdwSize, Win32Api.INTERNET_COOKIE_HTTPONLY, IntPtr.Zero);
lpszCookieData.Capacity = (int)lpdwSize;

Win32Api.InternetGetCookieEx(uri.OriginalString, id, lpszCookieData, ref lpdwSize, Win32Api.INTERNET_COOKIE_HTTPONLY, IntPtr.Zero);

return lpszCookieData.ToString();
}



IE保護モードのクッキー取得ソース




/// <summary>
/// IE保護モードのCookieValueを取得します。
/// </summary>
/// <param name="uri"></param>
/// <param name="id"></param>
/// <returns></returns>
public static string GetWin32ApiProtectedModeCookie(Uri uri, string id = null) {

int bufferSize = 4096;
StringBuilder pszCookieData = new StringBuilder();
do {
pszCookieData.Capacity = bufferSize;
uint pcchCookieData = (uint)bufferSize;

int result = Win32Api.IEGetProtectedModeCookie(uri.OriginalString, id, pszCookieData, ref pcchCookieData, Win32Api.INTERNET_COOKIE_HTTPONLY);
if(0 == result) {
// 取得
break;
}
else if(0 == pszCookieData.Length) {
// ない
break;
}
else if(pcchCookieData == bufferSize) {
// バッファ不足の可能性
}

bufferSize += 1024;
} while(bufferSize < 16384);

return pszCookieData.ToString();
}



Win32Apiクラスのソース




internal static class Win32Api {
public static readonly uint INTERNET_COOKIE_HTTPONLY = 0x00002000;

[DllImport("wininet.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public extern static bool InternetGetCookieEx(string lpszURL, string lpszCookieName, StringBuilder lpszCookieData, ref uint lpdwSize, uint dwFlags, IntPtr lpReserved);

[DllImport("Ieframe.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public extern static int IEGetProtectedModeCookie(string lpszURL, string lpszCookieName, StringBuilder pszCookieData, ref uint pcchCookieData, uint dwFlags);

}


シェアする

コメント

トラックバック

トラックバック用URL
http://www.youyoukankan.net/cms/action.php?action=plugin&name=TrackBack&tb_id=56
トラックバック
このエントリにトラックバックはありません