C # содержать идентификатор сеанса над httpwebrequest

Мне нужно сохранить один и тот же идентификатор сеанса при навигации по страницам сайта с помощью C # .Net (например, сканера). Я нашел несколько методов, http-сниффер был очень удобен, чтобы сравнить то, что отправлял мой браузер IE (HTTP-запрос), и получать с веб-сервера (HTTP-ответ), поскольку важная информация находится в заголовках (которые не отображаются браузером). Не делайте путаницы между идентификатором сеанса, который является общедоступным с сервера на браузер, и переменными сеанса сервера, которые являются частными для кода сервера (например, php).

WebHeaderCollection headerCollection = new WebHeaderCollection(); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { /* save headers */ for (int i = 0; i < response.Headers.Count; i++) { headerCollection.Add(response.Headers.AllKeys[i], response.Headers.Get(i)); } /* save cookies */ cookieContainer = new CookieContainer(); foreach (Cookie cookie in response.Cookies) { cookieContainer.Add(cookie); } } 

чтобы сделать другие запросы GET или POST:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); ... /* restore PHPSESSID */ for (int i = 0; i < headerCollection.Count; i++) { string key = headerCollection.GetKey(i); if (key == "Set-Cookie") { key = "Cookie"; } else { continue; } string value = headerCollection.Get(i); request.Headers.Add(key, value); } /* restore cookies */ request.CookieContainer = cookieContainer; /* complete request */ Stream writeStream = request.GetRequestStream() 

Моя просьба состоит в том, чтобы внести более эффективный код или дополнительные идеи, чтобы улучшить управление сеансом поискового робота.

    Если вы создаете один контейнер cookie и назначаете это как для своего первого, так и для второго запроса, вам не нужно будет делать все, что удаляет cookies из ответа.

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

    Ваш код будет: –

     cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { // Do stuff with response } 

    тогда:-

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); ... request.CookieContainer = cookieContainer; Stream writeStream = request.GetRequestStream() 
    Давайте будем гением компьютера.