WebResponse.GetResponseStream को एक स्ट्रिंग में कैसे बदलें?


79

मैं कई उदाहरण देखता हूं, लेकिन उनमें से सभी ने उन्हें बाइट सरणियों या एक बार में 256 वर्णों में पढ़ा, धीरे-धीरे। क्यों?

क्या परिणामी Streamमूल्य को एक स्ट्रिंग में बदलना उचित नहीं है जहां मैं इसे पार्स कर सकता हूं?

जवाबों:


58

आपको StreamReaderस्ट्रीम के चारों ओर बनाना चाहिए , फिर कॉल करें ReadToEnd

आपको WebClient.DownloadStringइसके बजाय कॉल करने पर विचार करना चाहिए ।


1
धन्यवाद SLaks, अब DownloadString की जाँच कर रहा है। वास्तव में मैं अपने पुराने ऐप की तुलना में अलग-अलग स्रोत कोड स्ट्रिंग प्राप्त कर रहा हूं जहां यह ब्राउज़र का उपयोग करता है। आपको लगता है कि DownloadString इसे ठीक कर देगा? मैं एक नया प्रश्न बना सकता हूं यदि यह उतना सीधा नहीं है।
जोन वेज

5
आपके पास एन्कोडिंग समस्या है या आपको कोई सेट करने की आवश्यकता है User-Agent
SLaks

धन्यवाद SLaks, मैं अब DownloadString का उपयोग करता हूं, और यह बेहतर है कि आप सही हैं। अब परिणाम थोड़ा अलग है, इससे कोई फर्क नहीं पड़ना चाहिए लेकिन मुझे <a href=पुराने वाले के बजाय सामान मिलता है जो कि था <A href=। यह अभी भी एन्कोडिंग से संबंधित है या User-Agentआपको लगता है?
जोन वेंज

2
यह अजीब लगता है; यह IE द्वारा सामान्यीकृत किया जा सकता है।
SLaks

3
WebClientऔर HttpWebRequestबिना किसी ब्राउज़र के कच्चे HTTP का उपयोग करें। यदि अलग-अलग ब्राउज़र अलग-अलग स्रोत दिखाते हैं , तो यह एक User-Agentसमस्या है।
एसएलके

142

आप उपयोग कर सकते हैं StreamReader.ReadToEnd(),

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}

1
@FaananMubasher - मैं XML को LINQ सुझाना चाहूंगा।
adatapost

2
महान है कि आपने बताया कि StreamReaderदूसरा पैरामीटर है Encoding.UTF8। ध्यान नहीं दिया कि पहली बार MS प्रलेखन को देखते हुए
newprint

5
एन्कोडिंग को UTF8 का निश्चित मान मानने के बजाय प्रतिक्रिया के मूल्य पर आधारित नहीं होना चाहिए।
हेनजी


GetResponse and GetResponseStreamअपवादों
PreguntonCojoneroCabrón

10

जैसा कि @Hinzi ने कहा कि प्रतिक्रिया के चरित्र सेट का उपयोग किया जाना चाहिए।

var encoding = response.CharacterSet == ""
    ? Encoding.UTF8
    : Encoding.GetEncoding(response.CharacterSet);

using (var stream = response.GetResponseStream())
{
    var reader = new StreamReader(stream, encoding);
    var responseString = reader.ReadToEnd();
}

5

रिचर्ड श्नाइडर सही है। साइट से डेटा प्राप्त करने के लिए नीचे दिए गए कोड का उपयोग करें जो कि utf8 नहीं है charset गलत स्ट्रिंग प्राप्त करेगा।

using (Stream stream = response.GetResponseStream())
{
   StreamReader reader = new StreamReader(stream, Encoding.UTF8);
   String responseString = reader.ReadToEnd();
}

"मैं वोट नहीं दे सकता। इसलिए यह लिखा।


3

आप StreamReaderस्ट्रीम के चारों ओर बना सकते हैं , फिर कॉल करें StreamReader.ReadToEnd()

StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.