2010-05-13 92 views
18

我想VB.net WebClient記住cookies。如何讓WebClient使用Cookie?

我已經搜索並嘗試了許多重載類。

我想通過POST登錄到網站,然後POST到另一個頁面並獲取其內容,同時仍保留我的會話。

這可能與VB.net不使用WebBrowser控件?

我試過Chilkat.HTTP,它可以工作,但我想使用.Net庫。

回答

44

創建一個從WebClient繼承的新類,該WebClient存儲CookieContainer,如@Guffa所述。下面是我用的,做的代碼,也保留引薦活着:

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 

這裏是上面的代碼中的C#版本:

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

會試試這個。謝謝。它類似於其他的繼承,然後重載類找到了。 – Jeremy 2010-05-14 10:05:58

+0

我一直使用這個多年來絕對成功。如果它不適合你,那麼它不是一個cookie /會話問題,但可能是你正在蜘蛛網站使用JavaScript來修改表單狀態。如果是這種情況,請檢查javascript或僅使用數據包監視器或提琴手來查看實際上通過線路發送的內容。 – 2010-05-14 12:48:17

+0

可以ne1發佈這在C#中,我的問題也類似,我發佈了一個問題,但我沒有得到ne相關的答案..仍然搜索答案.. – FosterZ 2010-12-16 14:18:53

4

您不能讓WebClient類記住cookie,您必須從響應中獲取cookie容器,並在下一個請求中使用它。

+0

感謝您的建議。 – Jeremy 2010-05-14 10:05:31