Подтвердить что ты не робот

HttpWebRequest: Добавить Cookie в CookieContainer → ArgumentException (имя_параметра: cookie.Domain)

Я пытаюсь войти на сайт через свое приложение. Что я сделал:

Сначала я выяснил, как браузер выполняет авторизацию с помощью Fiddler. Я изучил, как создается запрос POST, и я попытался его восстановить. Браузер отправляет 4 файла cookie (Google Analytics), и я попытался их установить:

CookieContainer gaCookies = new CookieContainer();
gaCookies.Add(new Cookie("__utma", "#########.###########.##########.##########.##########.#"));
gaCookies.Add(new Cookie("__utmb", "#########.#.##.##########"));
gaCookies.Add(new Cookie("__utmc", "#########"));
gaCookies.Add(new Cookie("__utmz", "#########.##########.#.#.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"));

(просто заменили исходные данные cookie на #)

Затем я просмотрел код с помощью отладчика, и как только первый gaCookies.Add будет выполнен, приложение остановится с

System.ArgumentException: The parameter '{0}' cannot be an empty string. Parameter name: cookie.Domain

Я хотел бы знать, почему это происходит. Конструктор Cookie не требует домена, и я не знаю, где я могу получить это значение?

Было бы здорово, если бы кто-то из вас мог мне помочь в этом. Я не веб-разработчик или эксперт в веб-материалах, поэтому я мало что знаю об этом.
Может быть, отличный источник, где я могу узнать об этом, если нет "короткого и быстрого ответа"?

4b9b3361

Ответ 1

CookieContainer может содержать несколько файлов cookie для разных веб-сайтов, поэтому для привязки каждого файла cookie к каждому веб-сайту должен быть указан ярлык (Домен). Домен может быть установлен при создании экземпляров отдельных файлов cookie следующим образом:

Cookie chocolateChip = new Cookie("CookieName", "CookieValue") { Domain = "DomainName" };

Простым способом захвата домена является создание Uri (если вы еще не используете его), который содержит целевой URL, и установить домен cookie с помощью свойства Uri.Host.

CookieContainer gaCookies = new CookieContainer();
Uri target = new Uri("http://www.google.com/");

gaCookies.Add(new Cookie("__utmc", "#########") { Domain = target.Host });