开发者

How can I get the WebClient to use Cookies?

开发者 https://www.devze.com 2022-12-29 23:11 出处:网络
I would like the VB.net WebClient to remember cookies. I have searched and tried numerous overloads classes.

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

I have searched and tried numerous overloads classes.

I want to login t开发者_如何学运维o a website via POST, then POST to another page and get its contents whilst still retaining my session.

Is this possible with VB.net without using WebBrowser control ?

I tried Chilkat.HTTP and it works, but I want to use .Net libraries.


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;
    }
}


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

精彩评论

暂无评论...
验证码 换一张
取 消