.NET में WebClient और HTTPWebRequest वर्गों के बीच क्या अंतर है?


178

क्या फर्क के बीच है WebClientऔर HttpWebRequestनेट में कक्षाएं? वे दोनों बहुत समान चीजें करते हैं। वास्तव में, वे एक वर्ग में विलय क्यों नहीं किए गए (बहुत सारे तरीके / चर आदि एक कारण हो सकते हैं लेकिन .NET में अन्य वर्ग हैं जो उस नियम को तोड़ते हैं)।

धन्यवाद।

जवाबों:


242

WebClient सबसे आम कार्यों को सरल बनाने के लिए HttpWebRequest के शीर्ष पर निर्मित एक उच्च-स्तरीय अमूर्त है। उदाहरण के लिए, यदि आप HttpWebResponse से सामग्री प्राप्त करना चाहते हैं, तो आपको प्रतिक्रिया स्ट्रीम से पढ़ना होगा:

var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();

var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();

WebClient के साथ, आप बस करते हैं DownloadString:

var client = new WebClient();
var content = client.DownloadString("http://example.com");

नोट: मैंने usingसंक्षिप्तता के लिए दोनों उदाहरणों से बयानों को छोड़ दिया । आपको अपने वेब अनुरोध ऑब्जेक्ट को ठीक से निपटाने के लिए निश्चित रूप से ध्यान रखना चाहिए।

सामान्य तौर पर, WebClient त्वरित और गंदे सरल अनुरोधों के लिए अच्छा है और HttpWebRequest तब अच्छा होता है जब आपको पूरे अनुरोध पर अधिक नियंत्रण की आवश्यकता होती है।


34
उपरोक्त तथ्य है, निम्नलिखित राय है: दोनों भयानक हैं क्योंकि HttpWebRequest टूट गया है। यह बुनियादी नियम को गलत तरीके से संभालता है, जैसे अजीब वर्कअराउंड की आवश्यकता होती है ServicePointManager.Expect100Continue = false, अन्य गैर-मानक चीजें करते हैं और कई quirks और idiosyncrasies होते हैं। मैंने उन समस्याओं को दूर करने में मदद करने के लिए रेस्टर्शप शुरू किया।
जॉन शेहान

4
यह भी ध्यान दें कि WebClient एक घटक है, इसलिए आप इसे वीएस टूल विंडो से अपने फॉर्म में ड्रैग / ड्रॉप कर सकते हैं और वहां इसका उपयोग करने में सक्षम हो सकते हैं।
फिरोज

1
मुझे लगता है कि मैंने थोड़ी देर पहले ही बुनियादी स्थिति के साथ httpwebrequest का उपयोग करने की कोशिश की। मैं इससे सहमत हो सकता हूं। तो आपने RestSharp बनाया? ठंडा!
गुरदीप

19
इस तरह से आने वाला कोई भी व्यक्ति मेरे पास अभी है, ध्यान दें HttpClientकि .NET 4.5 के साथ आने वाले क्षेत्र पर एक नया खिलाड़ी है जो उपरोक्त कुछ बाधाओं को हल कर सकता है या नहीं?)
Funka

3
WebClient IDisposable को लागू करता है, इसलिए आपको ऐसा करने पर विचार करना चाहिएusing (WebClient client = new WebClient())
Eric

32

इसके अलावा WebClient के पास टाइमआउट प्रॉपर्टी नहीं है। और यही समस्या है, क्योंकि डैफॉल्ट मान 100 सेकंड है और यह इंगित करने के लिए बहुत अधिक है कि क्या कोई इंटरनेट कनेक्शन नहीं है।

उस समस्या के लिए समाधान यहां https://stackoverflow.com/a/3052637/1303422 है


16
सवाल क्या अंतर था। एक अंतर यह है कि HttpWebRequest करते समय WebClient के पास टाइमआउट संपत्ति नहीं है।
एंड्री एफ।

26

मैं इसका उत्तर लंबे समय से जानता हूं लेकिन भविष्य के पाठकों के लिए सूचना के उद्देश्य के रूप में:

WebRequest

System.Object
    System.MarshalByRefObject
        System.Net.WebRequest

WebRequestएक सार आधार वर्ग है। तो आप वास्तव में इसे सीधे उपयोग नहीं करते हैं। आप इसका उपयोग व्युत्पन्न वर्गों के माध्यम से करते हैं - HttpWebRequestऔर FileWebRequest

आप का WebRequestएक उदाहरण बनाने के लिए बनाएँ विधि का उपयोग करें WebRequestGetResponseStreamलौटता है data stream

FileWebRequestऔर भी हैंFtpWebRequest वर्गों है कि inheritसे WebRequest। आम तौर पर, आप उपयोग WebRequestकरते हैं, ठीक है, एक अनुरोध करते हैं और वापसी को या तो परिवर्तित करते हैं HttpWebRequest, FileWebRequestया FtpWebRequest, आपके अनुरोध पर निर्भर करते हैं। नीचे एक उदाहरण है:

उदाहरण:

var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();

WebClient

System.Object
        System.MarshalByRefObject
            System.ComponentModel.Component
                System.Net.WebClient

WebClientएक द्वारा पहचाने गए संसाधन से आम संचालन sendingऔर receivingडेटा प्रदान करता हैURI । बस, यह एक उच्च-स्तरीय अमूर्तता है HttpWebRequest। यह 'सामान्य संचालन' वही है, जो इससे अलग WebClientहै HttpWebRequest, जैसा कि नीचे दिए गए नमूने में दिखाया गया है:

उदाहरण:

var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");

उदाहरण के लिए ऑपरेशन DownloadDataऔर DownloadFileऑपरेशन भी हैं WebClient। ये सामान्य ऑपरेशन उस कोड को भी सरल बनाते हैं जो हम सामान्य रूप से करते हैं HttpWebRequest। का उपयोग करते हुएHttpWebRequest , हमें अपने अनुरोध की प्रतिक्रिया प्राप्त करनी है, प्रतिक्रिया StreamReaderको पढ़ने के लिए तुरंत और आखिरकार, हम जो भी उम्मीद करते हैं उसका परिणाम परिवर्तित करें। के साथ WebClient, हम बस फोन करते हैं DownloadData, DownloadFile or DownloadString

हालांकि, ध्यान रखें कि WebClient.DownloadStringencoding आपके द्वारा अनुरोधित संसाधन पर विचार न करें । यदि आप निर्दिष्ट नहीं करते हैं और एन्कोडिंग करते हैं, तो आप शायद अजीब अक्षर प्राप्त करेंगे।

नोट: मूल रूप से " WebClient Webrequest की तुलना में कोड की कुछ लाइनें लेता है "


क्या WebClient Class उपयोग करता है पोस्ट / पाने का तरीका ..? कृपया वर्णन करने के लिए एक लिंक प्रदान करें
कार्तिकेय

WebRequest हमें एक प्रॉपर्टी METHOD के साथ रिक्वेस्ट मेथड टाइप यानी गेट / पोस्ट जोड़ने की अनुमति देता है। जहाँ WebClient के पास कार्यक्षमता जोड़ने का कोई तरीका नहीं है।
शेखर शाट

1
@SHEKHARSHETE मैं webClient.UploadData(url, "POST", bytes)विधि निर्दिष्ट करने के लिए ( MSDN डॉक्स देखें ) का उपयोग करने में सक्षम था ।
जेफ बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.