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

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

Мне нужно сохранить один и тот же идентификатор сеанса при навигации по страницам сайта с помощью С#.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()

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

4b9b3361

Ответ 1

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

Когда cookie задается ответом, контейнер 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()