1. 程式人生 > >VB通過webbrowser獲取httponly的cookie

VB通過webbrowser獲取httponly的cookie

大家都知道webbrowser是直接可以獲取到cookie的。

可以通過webbrowser1.document.cookie來獲取,但是利用這種方法!是獲取不到httponly的cookie的!

相信各位百度到這篇文章,也是同樣遇到小編遇到的問題了!

小編找了很久,,在網上找到以下解決方法

出處:http://www.cnblogs.com/nanfei/p/4106498.html

Option Explicit

' No more data is available.
Const ERROR_NO_MORE_ITEMS = 259

' The data area passed to a system call is too small.
Const ERROR_INSUFFICIENT_BUFFER = 122

Private Declare Function InternetSetCookie Lib "wininet.dll" _
 Alias "InternetSetCookieA" _
 (ByVal lpszUrlName As String, _
 ByVal lpszCookieName As String, _
 ByVal lpszCookieData As String) As Boolean

Private Declare Function InternetGetCookie Lib "wininet.dll" _
 Alias "InternetGetCookieA" _
 (ByVal lpszUrlName As String, _
 ByVal lpszCookieName As String, _
 ByVal lpszCookieData As String, _
 lpdwSize As Long) As Boolean

Private Sub Command1_Click()
    Dim bRet As Boolean
    bRet = InternetSetCookie("http://xxxx/xxxx.htm", "Test", "Sent as Test via VB")
    If bRet = False Then
        MsgBox "Failed"
    End If
End Sub

Private Sub Command2_Click()
    Dim sCookieVal As String * 256
    Dim bRet As Boolean
    bRet = InternetGetCookie("http://wwww.baidu.com", "Test", sCookieVal, 255)
    If bRet = False Then
      MsgBox "Failed"
    Else
      Debug.Print sCookieVal
    End If
End Sub

Private Sub Form_Load()
    WebBrowser1.Navigate "http://www.baidu.com"
End Sub

經過測試,發現這種方法只能獲取到普通cookie,一樣獲取不到標記為httponly的cookie

好了!重點重點來了!

既然通過API能獲取到cookie 那是不是也能獲取到httponly的呢?

參考了之前C#獲取的方法!

找到以下函式可以解決!

'宣告API
Private Const INTERNET_COOKIE_HTTPONLY As Integer = 8192
Private Declare Function InternetGetCookieEx Lib "wininet.dll" Alias "InternetGetCookieExA" (ByVal url As String, ByVal cookieName As String, ByVal cookieData As String, ByRef Size As Integer, ByVal Flags As Integer, ByVal pReserved As Long) As Boolean

不要問我8192是啥意思 我也是百度到的

'呼叫
Dim Buffer As String * 8096
If InternetGetCookieEx("http://www.baidu.com", vbNullString, Buffer, 8096, INTERNET_COOKIE_HTTPONLY, 0) Then
Msgbox(Buffer) '拿到的cookie
End If

這樣就可以拿到httponly的cookie啦~!是不是很簡單?

轉載請註明出處~!