Plusieurs WebRequest dans la même session

J’essaie d’écrire une fonction qui enregistre une page Web (avec ses images) sous forme de page html. J’utilise HttpWebRequest pour demander le contenu des pages Web. Ma fonction ressemble à quelque chose comme

void SaveUrl(ssortingng sourceURL, ssortingng savepath) { HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceURL); HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); StreamReader responseReader = new StreamReader(response.GetResponseStream()); ssortingng sResponseHTML = responseReader.ReadToEnd(); using (StreamWriter sw = new StreamWriter(savepath, false)) { sw.Write(sResponseHTML); } ssortingng[] ImageUrl = GetImgLinks(sResponseHTML); foreach (ssortingng imagelink in ImageUrl) { HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink); HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse(); //Code to save image } } 

Mon problème ici est que je veux faire toutes les requêtes en ligne dans la même session et que je ne veux pas créer une nouvelle session avec chaque imgRequest, car la plupart des images sur ma page Web sont générées dynamicment et sont stockées temporairement. de sorte que ces images ne peuvent être récupérées que si je fais une demande dans la même session.

Les sessions fonctionnent généralement à l’aide de cookies. Si vous souhaitez que toutes vos demandes fassent partie de la même session, vous devez conserver les cookies entre les demandes. Vous faites cela en créant un CookieContainer et en le fournissant à chacun des objects HttpWebRequest.

Voici votre code mis à jour pour utiliser un CookieContainer:

  void SaveUrl(ssortingng sourceURL, ssortingng savepath) { CookieContainer cookies = new CookieContainer(); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceURL); webRequest.CookieContainer = cookies; HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); StreamReader responseReader = new StreamReader(response.GetResponseStream()); ssortingng sResponseHTML = responseReader.ReadToEnd(); using (StreamWriter sw = new StreamWriter(savepath, false)) { sw.Write(sResponseHTML); } ssortingng[] ImageUrl = GetImgLinks(sResponseHTML); foreach (ssortingng imagelink in ImageUrl) { HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink); imgRequest.CookieContainer = cookies; HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse(); //Code to save image } }