.NET 4.x Как можно добавить в Request нестандартную куки (например, в значении которой запятая) - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Периодически у меня возникают проблемы с CookieContainer'ом. На разных форумах вопросы про это довольно много раз задавались, но нормального рабочего решения я так и не смог найти. Проблема в следующем: при обработке ответа от сервера он принимает и запоминает не все (или искажает) куки. Связазно это с тем, что они неправильно сформированы, т.е. не соответствуют стандартам. В большинстве случаев, с "нормальными" куки, всё работает отлично. Например, если в значении куки будет запятая, то запомнится она некорректно. Или CookieContainer может просто проигнорировать куки, если что-то не понравится (не полностью будет соответствовать стандартам). Более того, даже если удастся распарсить изменённый заголовок (response.Headers["Set-Cookie"]) и получить из него нужное значение, передать в следующем запросе к серверу значение с запятой в куки никак не получается. Вообще никак. Причём все браузеры эти ситуации обрабатывают нормально: и принимают корректно, и передают то, что приняли. Не ясно, почему Microsoft до сих пор не доработала этот кукиконтейнер. Понятное дело, что желательно всё делать по стандартам и соответствовать им, но "упираться рогом" это тоже не выход, далеко не всегда (почти никогда на практике) есть возможность изменить ответ опрашиваемого сервера. Поэтому, если кто знает, подскажите, пожалуйста, варианты решения проблемы. Или дайте ответ на один из вопросов:
  1. Самый главный: как можно добавить в Request (в идеале в CookieContainer) нестандартную куки (например, в значении которой запятая)? Замена на знак процента+код (%2c) не всегда срабатывает. Или, как вариант, получить полный контроль над передаваемыми заголовками.
  2. Как получить "raw" формат всех заголовков от сервера? После получения ответа ((HttpWebResponse)request.GetResponse()) поля Set-Cookies уже соединяются в одно поле. В принципе, это можно распарсить, но более надёжно было бы изначально обрабатывать как передаётся: одна строка Set-Cookie - один куки.
  3. Можно как-то доработать (наследовать) CookieContainer, исправив нужные методы? Если да, то как?
  4. Может, есть какой-то сторонний компонент CookieContainer'а или правильно работающий Request?
Сокеты не подойдут, т.к. это будет изобретение велосипеда, особенно проблем добавит необходимость реализации SSL. Хотелось бы уже нормально решить эту проблему и не лепить "костыли" при таких нестандартных ситуациях. Приветствуются любые идеи.

Решение задачи: «.NET 4.x Как можно добавить в Request нестандартную куки (например, в значении которой запятая)»

textual
Листинг программы
request.Headers.Add(..., cookie);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы