WebException.Response.GetResponseStream () ограничен 65536 символами - PullRequest
6 голосов
/ 01 февраля 2011

Я пытаюсь получить HTML-код с веб-страницы, используя HttpWebRequest и HttpWebResponse.

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

Объект ответа имеет значение ContentLength 106142. Когда я смотрю на объект потока, он имеет длину 65536. При чтении потока с помощью StreamReader с использованием ReadToEnd () возвращаются только первые 65536 символов. *

Как я могу получить весь код?

Edit:

Используя следующий сегмент кода:

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 ]

6 голосов
/ 15 мая 2014

Ответ в этой теме можно найти в System.Net.HttpWebResponse.GetResponseStream () возвращает усеченное тело в WebException

Вы должны управлять объектом HttpWebRequest и изменять свойство DefaultMaximumErrorResponseLength. Например:

HttpWebRequest.DefaultMaximumErrorResponseLength = 1048576;
1 голос
/ 01 февраля 2011

ReadToEnd делает именно это, он читает до конца потока.Я бы проверил, чтобы вы действительно отправляли весь ожидаемый ответ.

0 голосов
/ 01 февраля 2011

Кажется, есть проблема при вызове метода GetResponseStream () для HttpWebResponse, возвращенного исключением. Все работает, как ожидалось, когда нет исключений.

Я хотел получить HTML-код ошибки, возвращаемой сервером.

Полагаю, мне придется надеяться, что ошибка не превысит 65536 символов ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...