Как проанализировать HttpWebResponse.Headers.Keys для идентификатора сеанса Set-Cookie

Я пытаюсь создать сеанс HttpWebRequest / HttpWebResponse с веб-сайтом ASP.NET, чтобы позже проанализировать HTML-форму с помощью параметров URL (эту часть я знаю, как сделать), но я не понимаю, как анализировать и устанавливать cookie, такие как идентификатор сеанса В Fiddler он показывает, что идентификатор сеанса ASP.NET возвращается через Set-Cookie в ответ на запрос к / пути URL, но как я могу извлечь этот идентификатор сеанса и установить его в качестве файла cookie для следующего запроса HttpWebRequest? ? Я понимаю, что этот заголовок Set-Cookie будет найден в HttpWebResponse.Headers.Keys, но есть ли прямой путь к его разбору? Спасибо!

Ответы на вопрос(4)

гул, я могу ошибаться, но из того, что я наблюдаю в последнее время

Файлы cookie из первого ответа не включают в себя «набор файлов cookie»; в виде файлов cookie, которые появляются в заголовке (например, некоторый идентификатор сеанса ...) в случае статуса 302 (перенаправление)

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

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

.NET Framework будет управлять файлами cookie для вас. Вам не нужно заботиться о том, чтобы анализировать информацию о файлах cookie из заголовков или добавлять заголовки файлов cookie к вашим запросам.

Чтобы сохранить и отправить свой идентификатор сессии, используйтеCookie а такжеCookieContainer классы для их хранения, а затем убедитесь, что вы отправляете свои куки с каждым запросом.

В следующем примере показано, как это сделать. CookieContainer, & apos;cookieJar& APOS; могут быть разделены между несколькими доменами и запросами. Как только вы добавите его к объекту запроса, ссылка на него также будет добавлена к объекту ответа при возврате ответа.

CookieContainer cookieJar = new CookieContainer();

var request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com");
request.CookieContainer = cookieJar;

var response = request.GetResponse();

foreach (Cookie c in cookieJar.GetCookies(request.RequestUri))
{
    Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value);
}

Выход этого кода будет:

Cookie['PREF']: ID=59e9a22a8cac2435:TM=1246226400:LM=1246226400:S=tvWTnbBhK4N7Tlpu

Ответ от Дана Герберта мне очень помог. Я ценю вашу помощь.

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

первая:

CookieContainer cookieJar = new CookieContainer();
request.CookieContainer = cookieJar;
....

CookieCollection setCookies = cookieJar.GetCookies(request.RequestUri);

второй:

CookieContainer cc = new CookieContainer();
cc.Add(setCookies);    
request.CookieContainer = cc;

У меня такая же проблема (с амазонкой) Я использую следующее регулярное выражение:

string regexp = "(?<name>[^=]+)=(?<val>[^;]+)[^,]+,?";);
MatchCollection myMatchCollection = Regex.Matches(cookiesStr, regexp);
foreach (Match myMatch in myMatchCollection)
{
string cookieName = myMatch.Groups["name"].ToString();
string cookieVal = myMatch.Groups["val"].ToString();
Cookie cookie = new Cookie(cookieName, cookieVal);
cookies.Add(cookie);
}

Обратите внимание, что я забочусь только об имени / значении файла cookie ...

удачи Elia

ВАШ ОТВЕТ НА ВОПРОС