WebException.Response.GetResponseStream()限制为65536个字符

时间:2011-02-01 17:05:04

标签: c# .net webrequest

我正在尝试使用HttpWebRequest和HttpWebResponse从网页检索HTML代码。

response = (HttpWebResponse)request.GetResponse();
...
Stream stream = response.GetResponseStream();

响应对象的ContentLength值为106142.当我查看流对象时,它的长度为65536.使用ReadToEnd()使用StreamReader读取流时,仅返回前65536个字符。

我如何获得整个代码?

修改

使用以下代码段:

catch (WebException ex)
{
    errorMessage = errorMessage + ex.Message;
    if (ex.Response != null) {
        if (ex.Response.ContentLength > 0) 
        {
            using (Stream stream = ex.Response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream))
                {
                    string pageOutput = reader.ReadToEnd().Trim();

ex.Response.ContentLength = 106142

ex.Response.GetResponseStream()。长度= 65536

stream.Length = 65536

pageOutput.Length = 65534 (因为修剪)

是的,代码实际上已被截断。

3 个答案:

答案 0 :(得分:6)

您可以在System.Net.HttpWebResponse.GetResponseStream() returns truncated body in WebException

中找到此主题的答案

您必须管理HttpWebRequest对象并更改DefaultMaximumErrorResponseLength属性。 例如:

HttpWebRequest.DefaultMaximumErrorResponseLength = 1048576;

答案 1 :(得分:1)

ReadToEnd具体就是这样,它会读到流的末尾。我会检查以确保您确实收到了整个预期的回复。

答案 2 :(得分:-1)

在异常返回的HttpWebResponse上调用GetResponseStream()方法时似乎存在问题。当没有例外时,一切都按预期工作。

我想从服务器返回的错误中获取HTML代码。

我想我不得不希望错误不超过65536个字符......