2010-05-11 22 views
6

अगर मैं एक स्ट्रिंग के रूप में एक कच्चे HTTP प्रतिक्रिया है:HttpListenerResponse के रूप में कच्चे HTTP प्रतिक्रिया को कैसे पार्स करें?

HTTP/1.1 200 ठीक
दिनांक: मंगल, 11 मई 2010 07:28:30 GMT
समाप्ति: -1
कैश-नियंत्रण : निजी, अधिकतम आयु = 0
सामग्री-प्रकार: टेक्स्ट/एचटीएमएल; charset = यूटीएफ -8
सर्वर: gws
एक्स-एक्सएसएस-सुरक्षा: 1; मोड = ब्लॉक
कनेक्शन: करीब

<!doctype html><html>...</html> 

वहाँ एक आसान तरीका मैं इसे एक HttpListenerResponse वस्तु में पार्स कर सकते है? या कम से कम कुछ प्रकार .NET ऑब्जेक्ट इसलिए मुझे कच्चे प्रतिक्रियाओं के साथ काम करने की ज़रूरत नहीं है।

मैं वर्तमान में जो कर रहा हूं वह हेडर कुंजी/मूल्य जोड़े निकालने और उन्हें HttpListenerResponse पर सेट कर रहा है। लेकिन कुछ शीर्षकों को सेट नहीं किया जा सकता है, और फिर मुझे प्रतिक्रिया के शरीर को काटना होगा और इसे आउटपुटस्ट्रीम में लिखना होगा। लेकिन शरीर को gzipped किया जा सकता है, या यह एक छवि हो सकती है, जिसे मैं अभी तक काम नहीं कर सकता। और कुछ प्रतिक्रियाओं में हर जगह यादृच्छिक वर्ण होते हैं, जो एक एन्कोडिंग समस्या की तरह दिखते हैं। यह बहुत परेशानी है।

मुझे कच्ची प्रतिक्रिया मिल रही है क्योंकि मैं HTTP अनुरोध भेजने के लिए सॉक्स का उपयोग कर रहा हूं। जिस प्रोग्राम पर मैं काम कर रहा हूं वह मूल रूप से एक HTTP प्रॉक्सी है जो सॉक्स प्रॉक्सी के माध्यम से अनुरोधों को रूट कर सकता है, जैसे Privoxy करता है।

उत्तर

1

शायद तुम Webclient की ResponseHeaders संपत्ति पर एक नज़र लेने के लिए चाहते हैं:

WebClient wc = new WebClient(); 
wc.DownloadStringAsync(new Uri("http://www.foo.com")); 

WebHeaderCollection myWebHeaderCollection = myWebClient.ResponseHeaders; 

for (int i=0; i < myWebHeaderCollection.Count; i++)    
    Console.WriteLine ("\t" + myWebHeaderCollection.GetKey(i) + 
         " = " + myWebHeaderCollection.Get(i)); 

कृपया मुझे बताओ कि अगर नहीं है क्या आप के लिए खोज कर रहे थे।

+1

हम्म बस अपना प्रश्न दोबारा पढ़ें, और मुझे लगता है कि अगर आपको केवल कच्ची प्रतिक्रिया मिलती है और हाथ से आपकी प्रतिक्रिया का निर्माण करना पड़ता है ... –

+0

हाँ, मैं वर्तमान में HttpListenerResponse.Headers.Set का उपयोग कर रहा हूं (कुंजी, मूल्य), जो एक ही बात है। लेकिन आपके उत्तर के लिए धन्यवाद। – Edgar