2015-05-11 3 views
4

Я пытаюсь «экран царапать» некоторые данные у меня есть запрос следующим образом (от скрипача)Получения «Поток не читается» при чтении HttpWebResponse

POST http://fallenlondon.storynexus.com/Auth/EmailLogin HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
Referer: http://fallenlondon.storynexus.com/signup 
User-Agent: Mine 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Cache-Control: max-age=0 
l: 
Origin: http://fallenlondon.storynexus.com/ 
DNT: 1 
Accept-Encoding: utf-8 
Accept-Language: en-GB,en;q=0.8 
Cookie: ASP.NET_SessionId=05xq3gndu4nczvy5wsah5qyw; __utma=100212060.1740063036.1431282067.1431282067.1431284767.2; __utmb=100212060.14.10.1431284767; __utmc=100212060; __utmz=100212060.1431282067.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) 
Host: fallenlondon.storynexus.com 
Content-Length: 54 

(Содержание моих документов) - Это заголовок совпадает с запросом, который я отслеживал, вручную просматривая веб-страницу в моем браузере.

Я посылаю это с помощью HttpWebRequest.GetResponse() я получаю ответ обратно

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Cache-Control: no-cache, no-store, must-revalidate 
Content-Type: text/html; charset=utf-8 
Date: Mon, 11 May 2015 20:54:15 GMT 
Expires: -1 
Pragma: no-cache 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-AspNetMvc-Version: 4.0 
X-Powered-By: ASP.NET 
X-Server: Web1 
Content-Length: 16900 
Connection: keep-alive 

Это (снова) соответствует тому, что я получаю с помощью браузера. Использование скрипача, я могу видеть 17K данных (HTML), я стараюсь читать его, используя ...

var stream = response.GetResponseStream(); 
if (stream == null) return null; 
using (var reader = new StreamReader(stream, Encoding.UTF8)) 
{ 
    var data = reader.ReadToEnd(); 
    reader.Close(); 
    return data; 
} 

я получаю исключение на линии «новый StreamReader» с указанием «Поток не читается» My отладчик показывает мне, что поток не читается и не записывается. Это вторая страница, которую я прочитал (первая из них - простой запрос на главный URL-адрес, чтобы получить страницу входа в систему). Это работает отлично, используя тот же код. Все потоки и запросы были закрыты после использования.

Google не дает мне никакой помощи, предлагая ошибку страницы (нет, статус 200) или уже прочитал данные (нет, код идет прямо здесь) Я вообще не использую threading, так что это не проблема. Я попытался изменить кодировку (запрос GZIP дает мне меньшую полезную нагрузку, как и следовало ожидать, но я до сих пор не могу прочитать) Я использую C# .NET 4.5.2 на win7 x64

Кто-нибудь есть какие-либо идеи, что я «Неправильно?

+0

Просто FYI, вам не нужно закрывать читателя при использовании оператора using. Как только оператор использования теряет область действия, считыватель автоматически закроется и удалит. Даже если вы вернетесь в него, как только вы вернетесь, он считается вне сферы действия. –

+0

Привычка, я думаю ... – Taoist

+0

Вы пытались использовать 'StreamReader.Read()' вместо 'StreamReader.ReadToEnd()'? Может быть, «конец» неизвестен. –

ответ

3

D'oh! Из-за «надзора» в коде, я пытался прочитать поток дважды! Все действующие сейчас

+0

Я не вижу, где в вашем коде вы «читаете поток дважды». Что такое исправление? –

+0

Проблема была в другом месте, а не на самом деле в этом фрагменте Логика программы была неправильной (из-за небольшого количества рефакторинга) – Taoist

Смежные вопросы