2010-05-13 16 views
18

Me gustaría que el WebClient de VB.net recuerde las cookies.¿Cómo puedo hacer que el cliente web use cookies?

He buscado y probado numerosas clases de sobrecargas.

Quiero iniciar sesión en un sitio web a través de POST, luego POSTAR a otra página y obtener su contenido mientras sigo manteniendo mi sesión.

¿Esto es posible con VB.net sin usar el control WebBrowser?

Probé Chilkat.HTTP y funciona, pero quiero usar bibliotecas .Net.

Respuesta

44

Crea una nueva clase hereda de WebClient que almacena el CookieContainer como dice @Guffa. Aquí está el código que utilizo y que hace que también mantiene el árbitro vivo:

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 

Aquí está la versión C# del código anterior:

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

Lo intentaré. Gracias. Es similar a la otra herencia, luego se encontraron clases de sobrecarga. – Jeremy

+0

He estado usando esto durante años con absoluto éxito. Si no funciona para usted, entonces no es un problema de cookie/sesión, pero probablemente el sitio web que está analizando utiliza javascript para modificar el estado del formulario. Si ese es el caso, verifique el javascript o simplemente use un monitor de paquete o violín para ver lo que se está enviando realmente por el cable. –

+0

no puedo publicar esto en C#, y mi problema también es similar, publiqué una pregunta para esto, pero no obtuve ne respuestas relevantes ... sigo buscando la respuesta .. – FosterZ

4

No puede hacer que la clase de WebClient recuerde las cookies, debe obtener el contenedor de cookies de la respuesta y usarlo en la siguiente solicitud.

+0

Gracias por la sugerencia. – Jeremy

Cuestiones relacionadas