HttpWebRequest и HttpWebResponse: поддержание состояния зарегистрированного запроса для последовательных запросов - PullRequest
4 голосов
/ 24 июня 2009

У меня есть несколько связанных HttpWebRequests и HttpWebResponses, также использующих CookieContainer.

Код имитирует прохождение пользователем трех разных страниц «Я согласен», которые устанавливают информацию о куки, входят в систему с именем пользователя и паролем на четвертой и выполняют POST (поиск) на пятой, возвращая ответ в виде строки.

Есть ли способ сохранить объект HttpWebRequest как «залогиненный», чтобы избежать выполнения этих шагов каждый раз, когда какой-либо пользователь выполняет поиск?

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

1 Ответ

5 голосов
/ 24 июня 2009

Если сервер, на котором вы входите в систему, использует проверку подлинности на основе файлов 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, и он должен работать. : -)

...