दिलचस्प पोस्ट
एक बार jailbroken, आईओएस क्षुधा रूट विशेषाधिकार के साथ चला? क्या सीएसआरएफ हमलों एपीआई पर लागू होते हैं? रेगेक्स स्प्लिट स्ट्रिंग लेकिन अलग-अलग रखिए मैं कॉलिंग विधि का नाम कैसे प्राप्त करूं और प्रतिबिंब का उपयोग करूँ? सी # "के रूप में" कलाकार बनाम क्लासिक कलाकार अद्यतन पैनल पोस्टबैक के बाद जावास्क्रिप्ट कॉलबैक कैसे निष्पादित किया जाता है? खुले विंडो और विशिष्ट आकार को चालू करें आप मनमाने ढंग से जावा एप्लिकेशन में एंटी अलियासिंग को सक्षम कैसे करते हैं? क्या एक HTTPS क्वेरी स्ट्रिंग सुरक्षित है? एक कनेक्शन सफलतापूर्वक सर्वर के साथ स्थापित किया गया था, लेकिन फिर पूर्व-लॉगिन हैंडशेक के दौरान एक त्रुटि हुई गिट में आखिरी प्रतिबद्धता को कैसे पूर्ववत करें? आदेश की परवाह किए बिना तार की एक सूची के हैश हो रही है नक्शा टुकड़ा एपीआई v2 लेआउट के शीर्ष पर बटन कैसे जोड़ें कंटेनेटिंग के बिना स्ट्रिंग में लगातार शामिल करें नियंत्रण का उलटा क्या है?

HttpWebRequest और मूल GZip संपीड़न

Gzip संपीड़न के साथ एक पृष्ठ का अनुरोध करते समय मुझे निम्न त्रुटियां मिल रही हैं:

System.IO.InvalidDataException: GZip पाद लेख में सीआरसी डीकोडेड डेटा से गणना की गई सीआरसी से मेल नहीं खाती

मैं असंपीड़ित करने के लिए मूल GZipStream का उपयोग कर रहा हूँ और इस पते को देख रहा हूँ। इसके साथ दिमाग में इस या किसी अन्य जीजीआईपी लाइब्रेरी (मुक्त) को संबोधित करने के लिए एक काम है, जो इस मुद्दे को ठीक से संभाल सकता है?

मैं वेब रिस्पांस सामग्री एन्कोडिंग की पुष्टि कर रहा हूं GZIP है

5/11 अद्यतन करें सरलीकृत स्निपेट

//Caller public void SOSampleGet(string url) { // Initialize the WebRequest. webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Method = WebRequestMethods.Http.Get; webRequest.KeepAlive = true; webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; webRequest.Headers.Add("Accept-Encoding", "gzip,deflate"); webRequest.Referer = WebUtil.GetDomain(url); HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); using (Stream stream = GetStreamForResponse(webResponse, READTIMEOUT_CONST)) { //use stream } } //Method private static Stream GetStreamForResponse(HttpWebResponse webResponse, int readTimeOut) { Stream stream; switch (webResponse.ContentEncoding.ToUpperInvariant()) { case "GZIP": stream = new GZipStream(webResponse.GetResponseStream(), CompressionMode.Decompress); break; case "DEFLATE": stream = new DeflateStream(webResponse.GetResponseStream(), CompressionMode.Decompress); break; default: stream = webResponse.GetResponseStream(); stream.ReadTimeout = readTimeOut; break; } return stream; } 

Solutions Collecting From Web of "HttpWebRequest और मूल GZip संपीड़न"

Webrequest AutomaticDecompression संपत्ति के बारे में क्या .net 2 से उपलब्ध है? बस जोड़ें:

 webRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

यह gzip भी जोड़ता है, एन्कोडिंग हैडर स्वीकार करने के लिए डिफ्लेट करता है।

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.automaticdecompression.aspx देखें

क्या आप फ्लशिंग और स्ट्रीम को बंद कर रहे हैं? अपने GZipStream को एक प्रयोग कथन के साथ लपेटकर देखें

मुझे कुछ नमूना कोड मिला जो पूरे अनुरोध / GZip एन्कोडेड पृष्ठों के लिए प्रतिक्रिया दिखाता है। यह GZipStream का उपयोग करता है

http://www.know24.net/blog/Decompress+GZip+Deflate+HTTP+Responses.aspx

ऊपर मेरी टिप्पणी देखें, लेकिन यह आमतौर पर एक भ्रष्ट फ़ाइल का लक्षण है। यदि साइट आपकी ही है, तो उस फ़ाइल को प्रतिस्थापित करें जिसे आप एक्सेस करने का प्रयास कर रहे हैं।

.NET कोर चीजों के लिए थोड़ा अधिक शामिल है। एक GZipStream की आवश्यकता है क्योंकि GZipStream लिए संपत्ति (लेखन के रूप में) नहीं है मेरा उत्तर यहां देखें: https://stackoverflow.com/a/44508724/2421277

उत्तर से कोड:

 var req = WebRequest.CreateHttp(uri); /* * Headers */ req.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate"; /* * Execute */ try { using (var resp = await req.GetResponseAsync()) { using (var str = resp.GetResponseStream()) using (var gsr = new GZipStream(str, CompressionMode.Decompress)) using (var sr = new StreamReader(gsr)) { string s = await sr.ReadToEndAsync(); } } } catch (WebException ex) { using (HttpWebResponse response = (HttpWebResponse)ex.Response) { using (StreamReader sr = new StreamReader(response.GetResponseStream())) { string respStr = sr.ReadToEnd(); int statusCode = (int)response.StatusCode; string errorMsh = $"Request ({url}) failed ({statusCode}) on, with error: {respStr}"; } } } 

देशी GZipStream एक संकुचित GZIP ( RFC 1952 ) स्ट्रीम पढ़ सकता है, लेकिन यह ज़िप फ़ाइल स्वरूप को नियंत्रित नहीं कर सकता।

http://www.geekpedia.com/tutorial190_zipping-files-using-GZipStream.html से :

तीसरे पक्ष के उत्पाद पर जीज़िपस्ट्रीम वर्ग का उपयोग करने का नुकसान यह है कि इसमें सीमित क्षमताएं हैं सीमाओं में से एक यह है कि आप उस फ़ाइल को नाम नहीं दे सकते जो आपने संग्रह में रखा था। जब GZipStream फ़ाइल को एक ज़िप संग्रह में संपीड़ित करता है, तो उस फ़ाइल से बाइट्स के अनुक्रम को लेता है और कम्प्रेशन एल्गोरिदम का उपयोग करता है जो बाइट्स का एक छोटा क्रम बनाता है। बाइट्स का नया अनुक्रम नई ज़िप फ़ाइल में डाल दिया गया है। जब आप ज़िप फ़ाइल खोलते हैं, तो आप संग्रहित फ़ाइल को खोलेंगे; सबसे लोकप्रिय ज़िप extractors (WinZip, WinRar, आदि) आपको एक फ़ाइल के रूप में ज़िप की सामग्री दिखाएगा जो संग्रह के रूप में समान है।


संपादित करें: उपरोक्त नोट गलत है । GZipStream एक ज़िप फ़ाइल नहीं उत्पन्न करता है यह "एकल फ़ाइल ज़िप स्ट्रीम" नहीं है यह एक जीजीआईपी स्ट्रीम है वे अलग चीजें हैं इसमें कोई गारंटी नहीं है कि ज़िप अभिलेखागार को संभालने वाले टूल एक .gz फ़ाइल को संभाल लेंगे।


एक कार्यान्वयन के लिए जो ज़िप अभिलेखागार पढ़ सकते हैं, एक-ज़िप ज़िप धाराओं के विरोध में, #ziplib (SharpZipLib, पूर्व में NZipLib) का प्रयास करें ।