C# WebClient перехватывает файлы cookie ответа и собирает все файлы cookie для выполнения новых успешных запросов

Я пытаюсь войти на веб-сайт, а затем хожу по нему, чтобы найти информацию и что-то на ней сделать.

Все хорошо, когда запросу не нужны файлы cookie, но какой-то странице нужен файл cookie, который создается при первом запросе. Поэтому я должен собрать все файлы cookie в объекте WebClient.

Я использую этот код, но мне его недостаточно. Потому что мне все еще не хватает всех файлов cookie для следующего запроса.

public class CookieAwareWebClient : WebClient
{
    public CookieContainer CookieContainer { get; set; }
    public CookieCollection ResponseCookies { get; set; }
    //public CookieContainer ResponseCookieContainer { get; set; }


    public CookieAwareWebClient()
      : base()
    {
        CookieContainer = new CookieContainer();
        ResponseCookies = new CookieCollection();
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);

        HttpWebRequest webRequest = request as HttpWebRequest;
        if (webRequest != null)
        {
            webRequest.CookieContainer = CookieContainer;
        }

        return request;
    }

    protected override WebResponse GetWebResponse(WebRequest request)
    {
        var response = (HttpWebResponse)base.GetWebResponse(request);
        this.ResponseCookies = response.Cookies;


        return response;

    }

Вот мой код для запроса.

var loginLink  = "https...."; // an Uri with username and password values as queryString

   CookieAwareWebClient client = new CookieAwareWebClient();
   var loginResult = client.DownloadString(loginLink);

Я вижу результат, да, я в деле! вход в систему прошел успешно, но я теряю все свои файлы cookie, и следующий запрос отправляет меня на страницу входа ..

Я должен собрать все файлы cookie в моем webcilent cookieContainer. Я должен прочитать заголовок ответа, чтобы установить значения "Set-Cookie" для моего контейнера.

Подумайте об этом, у меня есть 3 ключа в моих файлах cookie перед запросом.

a = "123",
b = "asd",
c = "123"

и теперь я отправляю запрос на веб-сайт, и он возвращает мне 2 файла cookie (один новый, а другой - старый ключ с новым значением) назад (я вижу в заголовках ответов в «Set-Cookie»)

a = "123456",
d = "blabla"

поэтому мне нужно изменить ключ значения «a», и мне нужно добавить ключ «d» к моему файлу cookie, потому что я не хочу снова возвращаться на страницу входа в мой следующий запрос ...

Может быть, мне нужна библиотека, может быть, лучший класс WebClient, который может собрать все кокки, чтобы помочь мне обнаружить все страницы.

Я надеюсь, что кто-то может мне помочь. Наилучшие пожелания!

Как выполняется следующий запрос? Кстати, вам не нужны CookieContainer и CookieCollection. Это одно и то же. Вам просто нужен одинCookieContainer. Не беспокойтесь о заголовке set-cookie. HttpWebRequest автоматически обрабатывает этот обмен. Если вы потеряете файлы cookie, то, возможно, вы создали свой собственный класс new в WebClient. Я предлагаю напрямую использовать WebRequest / WebResponse или HttpClient и отказываться от WebClient. Как видно из отсутствия базовых инструментов, он не предназначен для такого рода задач (и вы еще даже не имеете дело с кодированием).

Jimi 19.12.2018 13:02
HttpClient работает хорошо :) Спасибо!
Mustafa Alan 21.01.2019 09:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
421
0

Другие вопросы по теме