2010-05-13 16 views
18

Desidero che VB.net WebClient memorizzi i cookie.Come posso ottenere che WebClient utilizzi i cookie?

Ho cercato e provato numerose classi di overload.

Desidero accedere a un sito Web tramite POST, quindi pubblicare su un'altra pagina e ottenere il suo contenuto pur mantenendo la mia sessione.

Ciò è possibile con VB.net senza utilizzare il controllo WebBrowser?

Ho provato Chilkat.HTTP e funziona, ma voglio usare le librerie .Net.

risposta

44

Creare una nuova classe eredita da WebClient che memorizza il CookieContainer come dice @Guffa. Ecco il codice che uso che lo fa e mantiene anche il referer 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 

Ecco la versione C# del codice di cui sopra:

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

Proveremo questo. Grazie. Il suo simile all'altro eredita, quindi vengono trovate le classi di sovraccarico. – Jeremy

+0

L'ho usato per anni con un successo assoluto. Se non funziona per te, allora non è un problema di cookie/sessione, ma probabilmente il sito web che stai spidering utilizza javascript per modificare lo stato del modulo. Se questo è il caso, controlla su javascript o usa semplicemente un monitor di pacchetto o un violinista per vedere cosa viene effettivamente inviato sul filo. –

+0

non può postare questo in C#, e anche il mio problema è simile, ho postato una domanda per questo, ma non ho avuto risposte pertinenti ... continuo a cercare la risposta .. – FosterZ

4

Non è possibile rendere la classe WebClient memorizzata nei cookie, è necessario ottenere il contenitore dei cookie dalla risposta e utilizzarlo nella richiesta successiva.

+0

Grazie per il suggerimento. – Jeremy

Problemi correlati