HttpWebRequest e HttpWebResponse: manter o estado de logado pedido de consultas consecutivas
-
10-07-2019 - |
Pergunta
Eu tenho alguns HttpWebRequests e HttpWebResponses encadeados, também usando CookieContainer.
O código simula um usuário passar por três páginas diferentes 'Eu concordo' que definem a informação de cookie, entrando com nome de usuário e senha em um quarto, e fazendo um POST (search) no quinto retornar a resposta como uma string.
Existe uma maneira que eu possa manter o objeto HttpWebRequest como 'logado' para evitar passar por essas etapas cada vez que nenhum executa usuário uma pesquisa?
Can I configurá-lo como estático, e se o seu nulo ou faltando informações de cookie ele pode ser executado através de todos os passos de outra forma apenas fazer o post do usuário requer? O que é um bom padrão para isso?.
Solução
Se o servidor que você está entrando para usos cookie de autenticação baseada em seguida, você deve criar um System.Net.CookieContainer onde armazenar o cookie de autenticação. Isto é bastante simples:
CookieContainer container = new CookieContainer();
// Create web request
request.CookieContainer = container;
// Create next web request
nextRequest.CookieContainer = container;
// And so on
...
Apenas reutilizar o objeto CookieContainer para todas as suas HttpWebRequest objetos, e mantê-lo na memória para uso posterior.
O CookieContainer é Serializable, para que possa persistir-lo em disco, se você precisa. Isso vai permitir que você mantenha o seu cookie (s) mesmo quando o usuário reinicia o aplicativo.
Como alternativa, se a página não usa cookies, mas lojas o ID da sessão na URL em vez disso, você precisa manter passagem ao longo da id de sessão na URL das páginas que Wisit. Basta anexar-lo para a url do e ele deve funcionar. : -)