VB.NET HttpWebRequest根据MSDN写法获取不到COOKIE,有的可以但不完整 50

DimrequestAsHttpWebRequest=CType(HttpWebRequest.Create("http://inf.net114.com/reg.htm... Dim request As HttpWebRequest = CType(HttpWebRequest.Create("http://inf.net114.com/reg.html"), HttpWebRequest)
request.CookieContainer = New CookieContainer
Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
Dim cook As Cookie
For Each cook In response.Cookies
Console.WriteLine("Cookie:")
Console.WriteLine("{0} = {1}", cook.Name, cook.Value)
Console.WriteLine("Domain: {0}", cook.Domain)
Console.WriteLine("Path: {0}", cook.Path)
Console.WriteLine("Port: {0}", cook.Port)
Console.WriteLine("Secure: {0}", cook.Secure)

Console.WriteLine("When issued: {0}", cook.TimeStamp)
Console.WriteLine("Expires: {0} (expired? {1})", cook.Expires, cook.Expired)
Console.WriteLine("Don't save: {0}", cook.Discard)
Console.WriteLine("Comment: {0}", cook.Comment)
Console.WriteLine("Uri for comments: {0}", cook.CommentUri)
Console.WriteLine("Version: RFC {0}", IIf(cook.Version = 1, "2109", "2965"))

' Show the string representation of the cookie.
Console.WriteLine("String: {0}", cook.ToString())
Next cook
response.Close()
获取其它页面有的可以,但是得到的COOKIE也不完整,找了两天网上基本也都是这种方法获取COOKIE的,不知道是什么原因
展开
 我来答
闪星2
2016-05-06 · TA获得超过3007个赞
知道大有可为答主
回答量:2898
采纳率:58%
帮助的人:1052万
展开全部

嘿嘿,试试下面这个api

    Private Const INTERNET_COOKIE_HTTPONLY As Integer = &H2000

    <SuppressUnmanagedCodeSecurity, SecurityCritical, DllImport("wininet.dll", EntryPoint:="InternetGetCookieExW", SetLastError:=True, ExactSpelling:=True)>
    Friend 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

    ''' <summary>
    ''' 获取webbrowser登录成功后的cookie,需要带上登录成功后的URL
    ''' </summary>
    ''' <param name="url"></param>
    ''' <returns></returns>
    <SecurityCritical()>
    Public Function GetCookie(url As String) As String
        Dim size As UInteger = 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(Convert.ToInt32(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

另外,再给你一个函数

    ''' <summary>
    ''' 字符串型的cookie转换成cookie型的cookiecollection
    ''' </summary>
    ''' <param name="cookieStr"></param>
    ''' <param name="cookie"></param>
    ''' <param name="domain"></param>
    Public Sub StringToCookie(ByVal cookieStr As String, ByRef cookie As CookieContainer, ByVal domain As String)
        cookie = New CookieContainer()
        Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 转换cookie开始")
        Try
            Dim cookstr As String() = cookieStr.Split(";"c)
            Dim cookieName As String = ""
            Dim cookieValue As String = ""
            For Each str As String In cookstr
                cookieName = str.Substring(0, InStr(str, "=") - 1).Trim()
                cookieValue = str.Substring(InStr(str, "="), str.Length - InStr(str, "=")).Trim()
                Dim ck As New Cookie(cookieName, cookieValue)
                'Debug.Print($"{cookieName} = {cookieValue}")
                ck.Domain = domain
                cookie.Add(ck)
            Next

            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 转换cookie成功")
        Catch ex As Exception
Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} {ex.StackTrace.ToString()}")
        Finally
            Debug.Print($"过程:{New StackTrace().GetFrame(0).GetMethod.Name} 转换cookie结束")
        End Try
    End Sub
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式