2011-02-07 44 views
9

Vì một số lý do ngoài yêu cầu hiểu biết của tôi được thực hiện cho một trang web perticular (https://learningnetwork.cisco.com/people/mrollins?view=profile) dẫn đến đối tượng phản hồi có trả lời chứa phiên bản trang web cố định.System.Net.HttpWebResponse.GetResponseStream() trả về nội dung bị cắt bớt trong WebException

Luồng kết thúc sau 65536 byte, bằng 2^16 byte. Tôi xem xét một số vòng đáng ngờ. Các yêu cầu than phiền của một lỗi máy chủ nội bộ, mà tôi nhấn mạnh, bởi vì tôi đã xác minh cả hai webbrowsers có thể làm cho tinh thần của phản ứng này, và rằng html đầy đủ được bao gồm trong phản ứng từ máy chủ. (Sử dụng fiddler)

tôi đã tìm thấy vấn đề trước đây ghi nhận here, đó là không đạt yêu cầu vì lý do đơn giản rằng nó kết thúc vào ghi chú này:

"Tôi đoán tôi sẽ phải hy vọng các lỗi không vượt quá 65536 ký tự ... "

Cũng vậy.

Cách giải quyết được đánh giá cao hoặc nếu có ai biết về bản sửa lỗi nâng cao cũng tốt.

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

Tôi nên bao gồm một số nhận xét về mã. Nó là một chương trình đơn giản như tôi đã có thể thực hiện, mà vẫn chứng minh được vấn đề. Để xem vấn đề, đặt một điểm ngắt ở cuối điều khoản bắt, và quan sát thấy chỉ có 2^16 byte đã được đọc. (sailength = 65536) – Tor

Trả lời

15

HttpWebRequest có thuộc tính tĩnh giới hạn độ dài yêu cầu web. dòng mã này, được chèn vào trước khi yêu cầu được đưa ra, giải quyết vấn đề.

HttpWebRequest.DefaultMaximumErrorResponseLength = 1048576; 
Các vấn đề liên quan