2011-02-07 6 views
9

में छोटा कर दिया शरीर देता है मेरी समझ एक perticular वेबसाइट (https://learningnetwork.cisco.com/people/mrollins?view=profile) एक reqsponse-वस्तु जिसका responsestream वेबसाइट के एक trunkated संस्करण हो में परिणाम से किए गए अनुरोधों परे किसी कारण से।System.Net.HttpWebResponse.GetResponseStream() WebException

धारा 65536 बाइट्स के बाद समाप्त होती है, जो 2^16 बाइट्स के बराबर होती है। मैं एक संदिग्ध दौर संख्या पर विचार करता हूं। अनुरोध एक आंतरिक सर्वर त्रुटि की शिकायत करते हैं, जिसे मैं सप्रेस करता हूं, क्योंकि मैंने पहले से ही सत्यापित किया है कि वेबब्रोसर इस प्रतिक्रिया को समझने में सक्षम हैं, और पूर्ण HTML को सर्वर से प्रतिक्रिया में शामिल किया गया है। (fiddler का प्रयोग करके)

मैं पहले here प्रलेखित समस्या है, जो सरल कारण के लिए असंतोषजनक है पाया है कि यह इस नोट पर समाप्त होता है:

"मुझे लगता है मैं त्रुटि आशा करना होगा 65536 वर्णों से अधिक नहीं है ... "

वैसे यह करता है।

वर्कअराउंड की सराहना की, या अगर कोई भी अपरिवर्तनीय फिक्स के बारे में जानता है जो भी अच्छा है।

using System; 
using System.IO; 
using System.Net; 
using System.Web.UI; 

namespace Example 
{ 
    public partial class _Default : Page 
    { 
     protected void Page_Load(object senderHidden, EventArgs eHidden) 
     { 
      //ServicePointManager.ServerCertificateValidationCallback += delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; 
      var cookieContainer = new CookieContainer(); 
      //Encoding enc = Encoding.UTF8; 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://learningnetwork.cisco.com/people/mrollins?view=profile"); 
      req.AllowAutoRedirect = false; 

      req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; 
      req.CookieContainer = cookieContainer; 
      req.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
      req.Method = "GET"; 
      req.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12"; 
      req.KeepAlive = true; 

      HttpWebResponse resp = null; 
      try 
      { 
       resp = (HttpWebResponse)req.GetResponse(); 
      } 
      catch (WebException e) 
      { 
       var r = e.Response as HttpWebResponse; 
       var memstream = Read(r.GetResponseStream()); 
       var wrongLength = memstream.Length; 
      } 
     } 

     public static MemoryStream Read(Stream stream) 
     { 
      MemoryStream memStream = new MemoryStream(); 

      byte[] readBuffer = new byte[4096]; 
      int bytesRead; 
      while ((bytesRead = stream.Read(readBuffer, 0, readBuffer.Length)) > 0) 
       memStream.Write(readBuffer, 0, bytesRead); 
      return memStream; 
     } 
    } 
} 
+0

मैं कोड के बारे में कुछ टिप्पणियां भी शामिल किया जाना चाहिए था। यह एक ऐसा कार्यक्रम है जितना मैं कर सकता हूं, जो अभी भी समस्या का प्रदर्शन करता है। समस्या को देखने के लिए, पकड़ खंड के अंत में ब्रेकपॉइंट रखें, और देखें कि केवल 2^16 बाइट पढ़े गए हैं। (गलत लम्बाई = 65536) – Tor

उत्तर

15

HttpWebRequest की एक स्थिर संपत्ति है जो वेब अनुरोधों की लंबाई को सीमित करती है। कोड की यह पंक्ति, अनुरोध करने से पहले डाली गई, समस्या हल करती है।

HttpWebRequest.DefaultMaximumErrorResponseLength = 1048576; 
संबंधित मुद्दे