2010-05-13 3 views
18

Я бы хотел, чтобы VB.net WebClient запоминал файлы cookie.Как я могу заставить WebClient использовать Cookies?

Я искал и пробовал многочисленные классы перегрузок.

Я хочу войти на сайт через POST, затем POST на другую страницу и получить его содержимое, сохраняя при этом мою сессию.

Возможно ли это с помощью VB.net без использования управления WebBrowser?

Я пробовал Chilkat.HTTP, и он работает, но я хочу использовать библиотеки .Net.

ответ

44

Создайте новый класс, наследуемый от 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

Попробуем это. Спасибо. Он похож на другой наследует, а затем перегружает классы ive. – Jeremy

+0

Я использую это в течение многих лет с абсолютным успехом. Если он не работает для вас, то это не проблема с cookie/session, но, вероятно, веб-сайт, который вы spidering, использует javascript для изменения состояния формы. Если это так, проверьте либо javascript, либо просто используйте монитор пакетов или скрипач, чтобы увидеть, что на самом деле отправляется по кабелю. –

+0

может ne1 опубликовать это в C#, и мой problm тоже схож, я разместил вопрос для этого, но я не получил соответствующих ответов. Попытайтесь найти ответ. – FosterZ

4

Вы не можете заставить класс WebClient запомнить файлы cookie, вы должны получить контейнер cookie из ответа и использовать его в следующем запросе.

+0

Спасибо за предложение. – Jeremy

Смежные вопросы