Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the WebClient to use Cookies?

Tags:

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 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.

like image 816
Jeremy Avatar asked May 13 '10 08:05

Jeremy


People also ask

What is WebClient used for?

The WebClient class provides common methods for sending data to or receiving data from any local, intranet, or Internet resource identified by a URI. The WebClient class uses the WebRequest class to provide access to resources.


1 Answers

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;     } } 
like image 55
Chris Haas Avatar answered Nov 08 '22 20:11

Chris Haas