HttpWebRequest y HttpWebResponse: mantenimiento del estado de la solicitud de inicio de sesión para consultas consecutivas

StackOverflow https://stackoverflow.com/questions/1036854

Pregunta

Tengo algunos HttpWebRequests y HttpWebResponses encadenados, también usando CookieContainer.

El código simula a un usuario que pasa por tres páginas diferentes 'Acepto' que establecen la información de la cookie, inician sesión con nombre de usuario y contraseña en un cuarto, y hacen una POST (búsqueda) en el quinto, devolviendo la respuesta como una cadena.

¿Hay alguna forma de mantener el objeto HttpWebRequest como 'conectado' para evitar seguir esos pasos cada vez que un usuario realiza una búsqueda?

¿Puedo configurarlo como estático, y si es nulo o carece de información de cookies, puede ejecutar todos los pasos? De lo contrario, ¿solo publicará la publicación que requiera el usuario? ¿Cuál es un buen patrón para esto?

¿Fue útil?

Solución

Si el servidor en el que está iniciando sesión usa autenticación basada en cookies, debe crear un System.Net.CookieContainer donde almacena la cookie de autenticación. Esto es bastante simple:

CookieContainer container = new CookieContainer();

// Create web request
request.CookieContainer = container;

// Create next web request
nextRequest.CookieContainer = container;

// And so on
...

Simplemente reutilice el objeto CookieContainer para todos sus objetos HttpWebRequest y guárdelo en la memoria para su uso posterior.

El CookieContainer es serializable, por lo que puede conservarlo en el disco si es necesario. Eso le permitirá conservar sus cookies incluso cuando su usuario reinicie su aplicación.

Alternativamente, si la página no usa cookies, sino que almacena la identificación de la sesión en la url, debe pasar la identificación de la sesión en la url de las páginas que conoce. Solo añádelo a la url y debería funcionar. :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top