Я пытаюсь «экран царапать» некоторые данные у меня есть запрос следующим образом (от скрипача)Получения «Поток не читается» при чтении 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
Кто-нибудь есть какие-либо идеи, что я «Неправильно?
Просто FYI, вам не нужно закрывать читателя при использовании оператора using. Как только оператор использования теряет область действия, считыватель автоматически закроется и удалит. Даже если вы вернетесь в него, как только вы вернетесь, он считается вне сферы действия. –
Привычка, я думаю ... – Taoist
Вы пытались использовать 'StreamReader.Read()' вместо 'StreamReader.ReadToEnd()'? Может быть, «конец» неизвестен. –