HttpWebRequest и HttpWebResponse: поддержание состояния зарегистрированного запроса для последовательных запросов
-
10-07-2019 - |
Вопрос
У меня есть несколько цепочек HttpWebRequests и HttpWebResponses, также использующих CookieContainer.
Код имитирует, что пользователь проходит по трем различным страницам «Я согласен», которые устанавливают информацию о cookie-файлах, выполняя вход с именем пользователя и паролем на четвертой, и выполняя POST (поиск) на пятой, возвращая ответ в виде строки. р>
Есть ли способ сохранить объект HttpWebRequest как «залогиненный», чтобы избежать выполнения этих шагов каждый раз, когда какой-либо пользователь выполняет поиск?
Могу ли я установить его как статический, и если он пуст или отсутствует информация о cookie, он может пройти через все этапы, в противном случае просто выполнить публикацию, требуемую пользователем? Каков хороший образец для этого?.
Решение
Если сервер, на котором вы входите в систему, использует проверку подлинности на основе файлов cookie, необходимо создать System.Net.CookieContainer, в котором вы сохраните файл cookie проверки подлинности. Это довольно просто:
CookieContainer container = new CookieContainer();
// Create web request
request.CookieContainer = container;
// Create next web request
nextRequest.CookieContainer = container;
// And so on
...
Просто повторно используйте объект CookieContainer для всех ваших объектов HttpWebRequest и сохраните его в памяти для дальнейшего использования.
CookieContainer является Сериализуемым, поэтому вы можете сохранить его на диске, если вам нужно. Это позволит вам сохранить cookie-файлы даже после того, как ваш пользователь перезапустит ваше приложение.
В качестве альтернативы, если страница не использует куки-файлы, а вместо этого сохраняет идентификатор сеанса в URL-адресе, необходимо сохранить идентификатор сеанса в URL-адресе посещаемых вами страниц. Просто добавьте его к URL, и он должен работать. : -)