HttpWebRequest e HttpWebResponse: mantenimento dello stato della richiesta di accesso per query consecutive

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

Domanda

Ho alcuni HttpWebRequests e HttpWebResponses concatenati insieme, anche usando CookieContainer.

Il codice simula un utente che passa attraverso tre diverse pagine 'Accetto' che impostano le informazioni sui cookie, accedendo con nome utente e password su un quarto e facendo un POST (ricerca) sul quinto restituendo la risposta come stringa.

Esiste un modo in cui posso mantenere l'oggetto HttpWebRequest come 'connesso' per evitare di passare attraverso questi passaggi ogni volta che un utente esegue una ricerca?

Posso impostarlo come statico e se è nullo o privo di informazioni sui cookie può eseguire tutti i passaggi, altrimenti basta fare il post richiesto dall'utente? Qual è un buon modello per questo ?.

È stato utile?

Soluzione

Se il server a cui si sta effettuando l'accesso utilizza l'autenticazione basata su cookie, è necessario creare un System.Net.CookieContainer in cui è memorizzato il cookie di autenticazione. Questo è abbastanza semplice:

CookieContainer container = new CookieContainer();

// Create web request
request.CookieContainer = container;

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

// And so on
...

Riutilizzate semplicemente l'oggetto CookieContainer per tutti gli oggetti HttpWebRequest e conservatelo in memoria per un uso successivo.

CookieContainer è serializzabile, quindi è possibile persistere su disco se necessario. Ciò ti consentirà di conservare i tuoi cookie anche quando l'utente riavvia la tua applicazione.

In alternativa, se la pagina non utilizza i cookie ma memorizza l'id di sessione nell'URL, è necessario mantenere l'ID di sessione nell'URL delle pagine che si desidera visualizzare. Basta aggiungerlo all'URL e dovrebbe funzionare. : -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top