HttpWebRequest et HttpWebResponse: maintien de l'état de la demande connectée pour des requêtes consécutives

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

Question

J'ai quelques chaînes HttpWebRequests et HttpWebResponses chaînées, également à l'aide de CookieContainer.

Le code simule un utilisateur passant par trois pages différentes "Je suis d'accord" qui définissent les informations de cookie, se connectant avec un nom d'utilisateur et un mot de passe sur un quatrième, et effectuant un POST (recherche) sur le cinquième, renvoyant la réponse sous forme de chaîne.

Existe-t-il un moyen de conserver l'objet HttpWebRequest en tant que "connecté" pour éviter de suivre ces étapes à chaque fois qu'un utilisateur effectue une recherche?

Puis-je le configurer en tant que statique, et si les informations de cookie nuls ou manquantes lui manquent, il peut exécuter toutes les étapes, sinon il suffit de poster le message requis par l'utilisateur? Quel est le bon modèle pour cela?.

Était-ce utile?

La solution

Si le serveur auquel vous vous connectez utilise une authentification basée sur les cookies, vous devez créer un System.Net.CookieContainer où vous stockerez le cookie d'authentification. C’est assez simple:

CookieContainer container = new CookieContainer();

// Create web request
request.CookieContainer = container;

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

// And so on
...

Il vous suffit de réutiliser l'objet CookieContainer pour tous vos objets HttpWebRequest et de le conserver en mémoire pour une utilisation ultérieure.

Le CookieContainer est sérialisable, vous pouvez donc le conserver sur le disque si vous en avez besoin. Cela vous permettra de conserver vos cookies même lorsque votre utilisateur redémarre votre application.

Sinon, si la page n'utilise pas de cookies mais stocke l'identifiant de session dans l'URL, vous devez conserver l'identifiant de session dans l'URL des pages que vous avez consultées. Il suffit de l'ajouter à l'URL et cela devrait fonctionner. : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top