C # HttpClient Cookie и вопрос идентификатора сессии - PullRequest
0 голосов
/ 05 октября 2018

просмотрел немного материала для чтения и нашел процессы, которые требуют ввода только в простых формах, а не автоматизации браузера. Я слышал о том, как делать запросы и отправлять на сервер информацию, которую он ожидает с помощью HTTP-запросов.Я подумал, что смогу это сделать!

Я попытаюсь сразу перейти к сути дела:

class Program
 {     
   private static System.Net.CookieContainer cookieContainer = new CookieContainer();
    private static HttpClientHandler clientHandler = new HttpClientHandler
    {
        AllowAutoRedirect = true,
        UseCookies = true,
        CookieContainer = cookieContainer
    };

Так что я пытаюсь заставить Http-клиента использовать всю программу,И когда я доберусь до своего первого экрана входа в систему (я использовал fiddler, чтобы увидеть, какую форму необходимо опубликовать), я произвожу успешный вход в систему с помощью сообщения.

Я покажу вам метод сообщения:

         async static void PostRequest(string strUrl, 
          IEnumerable<KeyValuePair<string, string>> queries)
    {
        HttpContent q = new FormUrlEncodedContent(queries);
        HttpResponseMessage response = await client.PostAsync(strUrl, q);

        HttpContent content = response.Content;
        string myContent = await content.ReadAsStringAsync();

        // Console.WriteLine(myContent);
        Console.WriteLine(response);
        Console.WriteLine(myContent);
        response.Dispose();

    }

Моя проблема здесь, следующий пост, который я пытаюсь сделать, - это другая форма после того, как вы вошли в систему. Я снова использовал Fiddler, чтобы выяснить, чего ожидал сервер, и разместил его по соответствующему URL-адресу, но когда япечатать каждый шаг процесса, почти как он не знает сеанса или что-то.Fiddler показал мне cookie-файл и сессию, и я подумал, что он был захвачен контейнером, и затем его можно было использовать в остальной части программы, когда я запрашиваю / отправляю на страницы на сервере.

Я пропустилчто-нибудь?Вы все не сможете перейти на настоящую веб-страницу, но я могу объяснить, что показывает fiddler на вкладке cookie: говорит, что запрос отправил 2685 байт данных cookie, затем огромный набор случайных букв и цифр и несколько значений, которыепосмотрите мой логин, затем я также вижу другой случайный набор цифр и букв, которые называются идентификатором сессии.

Итак, чтобы подвести итог, в чем заключается мой вопрос, я неправильно понимаю, что делает CookieContainer?Я предполагал, что во всех запросах или сообщениях, которые я делаю с этим HttpClient, он узнает, что это был сеанс с моего первоначального входа в систему.

Мысли, идеи, ссылки, которые я, возможно, еще не обнаружил, все приветствуются :).

Спасибо, ребята!

1 Ответ

0 голосов
/ 30 октября 2018

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

Итак, когда вы находитесь за пределами браузера (из.NET перспектива), CookieContainer будет привязан к запросу (и его ответу) и ничего более.

Чтобы достичь того, что вы хотите, вам нужно будет извлечь значения cookie из ответа, сохранить их где-то еще ивставьте их снова в следующем запросе.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...