How can I get the WebClient to use Cookies?

后端 未结 2 1829
渐次进展
渐次进展 2020-11-27 04:56

I would like the VB.net WebClient to remember cookies.

I have searched and tried numerous overloads classes.

I want to login to a website via POST, then POST

相关标签:
2条回答
  • 2020-11-27 05:38

    You can't make the WebClient class remember the cookies, you have to get the cookie container from the response and use it in the next request.

    0 讨论(0)
  • 2020-11-27 05:46

    Create a new class the inherits from WebClient that stores the CookieContainer like @Guffa says. Here's code that I use that does that and also keeps the referer alive:

    Public Class CookieAwareWebClient
        Inherits WebClient
    
        Private cc As New CookieContainer()
        Private lastPage As String
    
        Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
            Dim R = MyBase.GetWebRequest(address)
            If TypeOf R Is HttpWebRequest Then
                With DirectCast(R, HttpWebRequest)
                    .CookieContainer = cc
                    If Not lastPage Is Nothing Then
                        .Referer = lastPage
                    End If
                End With
            End If
            lastPage = address.ToString()
            Return R
        End Function
    End Class
    

    Here's the C# version of the above code:

    using System.Net;
    class CookieAwareWebClient : WebClient
    {
        private CookieContainer cc = new CookieContainer();
        private string lastPage;
    
        protected override WebRequest GetWebRequest(System.Uri address)
        {
            WebRequest R = base.GetWebRequest(address);
            if (R is HttpWebRequest)
            {
                HttpWebRequest WR = (HttpWebRequest)R;
                WR.CookieContainer = cc;
                if (lastPage != null)
                {
                    WR.Referer = lastPage;
                }
            }
            lastPage = address.ToString();
            return R;
        }
    }
    
    0 讨论(0)
提交回复
热议问题