WPF、VB.NET アプリケーションを介して HttpOnly Cookie を読み取ろうとしています。問題のサイトは、訪問時に 2 つの Cookie を提供します。1 つは HttpOnly、もう 1 つは通常の Cookie です。
Internet Explorer を使用して、Cookie を読み取りたいサイトにアクセスします。次に、開発者ツール --> キャッシュ --> Cookie 情報を表示します。HttpOnly ではなく、通常の Cookie のみが表示されます (Chrome は両方を正しく表示します。削除して更新すると、サイトは 500 エラーを返すため、Cookie は確実に存在します)。
ここで説明されている内容に基づいて、コードを実行します: c# Get httponly cookie、次のとおりです。
Private Const INTERNET_COOKIE_HTTPONLY As Integer = &H2000
<SuppressUnmanagedCodeSecurity, SecurityCritical, DllImport("wininet.dll", EntryPoint:="InternetGetCookieExW", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True)>
Friend Shared Function InternetGetCookieEx(<[In]> Url As String, <[In]> cookieName As String, <Out> cookieData As StringBuilder, <[In], Out> ByRef pchCookieData As UInteger, flags As UInteger, reserved As IntPtr) As Boolean
End Function
<SecurityCritical()>
Public Shared Function GetCookie(url As String) As String
Dim size As Integer = 0
Dim sb As New StringBuilder
If InternetGetCookieEx(url, vbNullString, Nothing, size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero) Then '<-- this always returns false
If size <= 0 Then
Return Nothing
End If
sb = New StringBuilder(size + 1)
If Not InternetGetCookieEx(url, vbNullString, sb, size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero) Then
Return Nothing
End If
End If
Dim lastErrorCode = Marshal.GetLastWin32Error '<-- 259
Return sb.ToString()
End Function
GetCookie("https://www.xyz.com")
上記のさまざまなバリエーションを試しましたが、結果は同じです。lastErrorCode は常に 259 に等しく、これは ERROR_NO_MORE_ITEMS に変換され、Cookie が見つからなかったことを意味します。
1) 問題のサイトは信頼済みサイト ゾーンにあるため、保護モードでは機能しません。
2) サイトは SSL の下にあります (これが何か関係があるかどうかはわかりません)。
3) これらの Cookie の場所をハード ディスクで必死に検索しましたが、役に立ちませんでした。
4) どちらもセッション Cookie です (つまり、有効期限は宣言されていません)。
5) Windows 8 x64、IE10、VS2012
これはプロジェクトのマイルストーンのほんの一部であり、数え切れないほどの時間を私にもたらしました。
やり過ぎでない限り(つまり、winpcap / fiddlercoreなど)、このCookieの値が得られたらすぐに、方法論を完全に変更したいと思っています。