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