2009-03-01 9 views
87

में एचटीएमएल स्रोत कैसे डाउनलोड कर सकता हूं मैं एचटीएमएल स्रोत को सी # में वेब पता कैसे प्राप्त कर सकता हूं?मैं सी #

उत्तर

155

आप WebClient class साथ फ़ाइलों को डाउनलोड कर सकते हैं:

using System.Net; 
//... 
using (WebClient client = new WebClient()) // WebClient class inherits IDisposable 
{ 
    client.DownloadFile("http://yoursite.com/page.html", @"C:\localfile.html"); 

    // Or you can get the file content without saving it: 
    string htmlCode = client.DownloadString("http://yoursite.com/page.html"); 
    //... 
} 
+0

ध्यान दें: यदि अधिक नियंत्रण की आवश्यकता है, तो HttpWebRequest क्लास (उदाहरण के लिए प्रमाणीकरण निर्दिष्ट करने में सक्षम होना) देखें। – Richard

+1

हां, HttpWebRequest आपको अधिक नियंत्रण देता है, हालांकि आप क्लाइंट का उपयोग कर वेब क्लाइंट के साथ POST अनुरोध कर सकते हैं। अपलोड करेंडाटा (uriString, "POST", postParamsByteArray); – CMS

+1

क्या यह वेबएक्सप्शन को इसके आसपास पकड़ने के लिए समझदार नहीं होगा? शायद यह माना गया था। इस विधि के साथ किसी भी अन्य अपवाद या त्रुटियों को पकड़ा जाना चाहिए? –

33

मूल रूप से:

using System.Net; 
using System.Net.Http; // in LINQPad, also add a reference to System.Net.Http.dll 

WebRequest req = HttpWebRequest.Create("http://google.com"); 
req.Method = "GET"; 

string source; 
using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream())) 
{ 
    source = reader.ReadToEnd(); 
} 

Console.WriteLine(source); 
10

"सेमी" जिस तरह से और अधिक हाल है, एमएस वेबसाइट

में सुझाव दिया है, लेकिन मैं एक समस्या थी हल करने के लिए मुश्किल, चौड़ाई दोनों विधि यहां पोस्ट की गई

अब मैं solu पोस्ट सभी के लिए टयन!

समस्या: अगर आप इस तरह एक यूआरएल का उपयोग करें: कुछ मामले में "www.somesite.it/?p=1500" आप हालांकि वेब ब्राउज़र इस "www में कोई आंतरिक सर्वर त्रुटि (500) मिलता है। somesite.it/?p=1500 "पूरी तरह से काम करते हैं।

समाधान: आप मानकों (हाँ आसान है) बाहर ले जाने के लिए है, काम कर कोड है:

using System.Net; 
//... 
using (WebClient client = new WebClient()) 
{ 
    client.QueryString.Add("p", "1500"); //add parameters 
    string htmlCode = client.DownloadString("www.somesite.it"); 
    //... 
} 

यहां आधिकारिक दस्तावेज: http://msdn.microsoft.com/en-us/library/system.net.webclient.querystring.aspx

13

आप के साथ इसे प्राप्त कर सकते हैं:

var html = new System.Net.WebClient().DownloadString(siteUrl) 
+0

लघु और मीठा! जो अल्बाहारी के उदाहरण को पढ़ने के बाद मुझे आपका सुझाव मिला। LINQPad> सहायता> नया क्या है, और कैश की खोज करें। – Colin

+7

var html = new System.Net.WebClient()। डाउनलोडस्ट्रिंग (siteUrl); // अपने ग्राहक को नया करने की जरूरत है! – user1328350

+4

क्या यह 'वेब क्लाइंट' का निपटान करता है? –

4

यह पोस्ट वास्तव में पुराना है (यह 7 साल का है जब मैं हूं इसका जवाब देना), इसलिए अन्य समाधानों में से कोई भी नया और अनुशंसित तरीका नहीं था, जो HttpClient वर्ग है।

HttpClient नई एपीआई माना जाता है और यह कैसे HttpClient वर्ग (विशेष रूप से async मामलों में) का उपयोग करने के बारे में अधिक जानकारी के लिए, आप उल्लेख कर सकते हैं के लिए एक पुरानी WebClient और WebRequest

string url = "page url"; 

using (HttpClient client = new HttpClient()) 
{ 
    using (HttpResponseMessage response = client.GetAsync(url).Result) 
    { 
     using (HttpContent content = response.Content) 
     { 
      string result = content.ReadAsStringAsync().Result; 
     } 
    } 
} 

बदलना चाहिए this question