Как я могу заставить WebClient использовать Cookie?

Я хотел бы, чтобы VB.net WebClient помнил cookie.

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

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

Действительно ли это возможно с VB.net, не используя управление WebBrowser?

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

18
задан John Saunders 21 May 2013 в 11:57
поделиться

2 ответа

Создайте новый класс, унаследованный от 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;
    }
}
46
ответ дан 30 November 2019 в 06:25
поделиться

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

4
ответ дан 30 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: