Я бачу багато прикладів, але всі вони повільно читають їх у байтові масиви або 256 символів. Чому?
Чи не бажано просто перетворити отримане Streamзначення у рядок, де я можу його проаналізувати?
Я бачу багато прикладів, але всі вони повільно читають їх у байтові масиви або 256 символів. Чому?
Чи не бажано просто перетворити отримане Streamзначення у рядок, де я можу його проаналізувати?
Відповіді:
Ви повинні створити StreamReaderнавколо потоку, а потім зателефонувати ReadToEnd.
WebClient.DownloadStringЗамість цього вам слід зателефонувати .
User-Agent.
<a href=замість старої, яка була <A href=. Це все ще пов’язано з кодуванням, чи User-Agentви думаєте?
WebClientі HttpWebRequestвикористовувати сирий HTTP без задіяного браузера. Якщо різні браузери показують різні джерела перегляду , це User-Agentпроблема.
Ви можете використовувати StreamReader.ReadToEnd(),
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReaderбере другий параметр Encoding.UTF8. Спочатку не помітив, що під час перегляду документації MS
GetResponse and GetResponseStreamможе кинути винятки
Як згадував @Heinzi, слід використовувати набір символів відповіді.
var encoding = response.CharacterSet == ""
? Encoding.UTF8
: Encoding.GetEncoding(response.CharacterSet);
using (var stream = response.GetResponseStream())
{
var reader = new StreamReader(stream, encoding);
var responseString = reader.ReadToEnd();
}
Річард Шнайдер має рацію. використовуйте код нижче, щоб отримати дані з сайту, який не є кодировкою utf8, отримає неправильний рядок.
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
"я не можу голосувати. так написав це.