2009-04-24 16 views
16

मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो एक HTML पृष्ठ (इसकी छवियों के साथ) को HTML पृष्ठ के रूप में सहेजता है। मैं वेबपृष्ठों की सामग्री के लिए अनुरोध करने के लिए HttpWebRequest का उपयोग कर रहा हूं। मेरे समारोह लगता है किएक ही सत्र में एकाधिक WebRequest

void SaveUrl(string sourceURL, string savepath) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(sourceURL); 
    HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse(); 
    StreamReader responseReader = new StreamReader(response.GetResponseStream()); 

    string sResponseHTML = responseReader.ReadToEnd(); 
    using (StreamWriter sw = new StreamWriter(savepath, false)) 
    { 
     sw.Write(sResponseHTML); 
    } 

    string[] ImageUrl = GetImgLinks(sResponseHTML); 
    foreach (string imagelink in ImageUrl) 
    { 
     HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink); 
     HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse(); 
     //Code to save image 
    } 
} 

मेरे समस्या यहाँ कुछ है मैं सभी webrequest एक ही सत्र में बनाना चाहते हैं और प्रत्येक imgRequest के साथ नया सत्र बनाना चाहते हैं न, मेरे वेब पेज पर छवियों के रूप में कई गतिशील रूप से उत्पन्न कर रहे हैं और अस्थायी रूप से संग्रहीत हैं। इसलिए यदि मैं उसी सत्र में अनुरोध करता हूं तो उन छवियों को केवल तभी लाया जा सकता है।

उत्तर

32

सत्र आमतौर पर कुकीज़ का उपयोग करके काम करते हैं। यदि आप अपने सभी अनुरोधों को एक ही सत्र का हिस्सा बनना चाहते हैं, तो आपको अनुरोधों के बीच कुकीज़ को जारी रखने की आवश्यकता है। आप कुकी कंटनर बनाने और इसे प्रत्येक HttpWebRequest ऑब्जेक्ट्स को प्रदान करके ऐसा करते हैं।

void SaveUrl(string sourceURL, string 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()); 

     string sResponseHTML = responseReader.ReadToEnd(); 
     using (StreamWriter sw = new StreamWriter(savepath, false)) { 
      sw.Write(sResponseHTML); 
     } 

     string[] ImageUrl = GetImgLinks(sResponseHTML); 
     foreach (string imagelink in ImageUrl) { 
      HttpWebRequest imgRequest = (HttpWebRequest)WebRequest.Create(imagelink); 
      imgRequest.CookieContainer = cookies; 
      HttpWebResponse imgresponse = (HttpWebResponse)imgRequest.GetResponse(); 
      //Code to save image 
     } 
    } 
:

अपने कोड एक CookieContainer उपयोग करने के लिए अपडेट हो जाता है

संबंधित मुद्दे