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

Как разобрать 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, но есть ли прямой путь к его синтаксическому анализу? Благодарю!

4b9b3361

Ответ 1

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

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

В следующем примере показано, как это сделать. CookieContainer, 'cookieJar' может использоваться для разных доменов и запросов. Когда вы добавите его в объект запроса, ссылка на него также будет добавлена ​​в объект ответа, когда ответ будет возвращен.

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

Ответ 2

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

Просто хочу опубликовать мое использование - надеюсь, что это поможет кому-то в определенный момент времени. Мое требование состоит в том, что мне нужно отправить файлы 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;

Ответ 3

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

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

Ответ 4

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

Куки из первого ответа, не включайте 'set cookie' в качестве файлов cookie, которые входят в заголовок (например, некоторый идентификатор сеанса...) в случае статуса 302 (перенаправление)

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

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