我看到很多例子但是它们都会一次读入一个字节数组或256个字符,速度较慢。为什么呢?
直接将结果 Stream
值转换成字符串来解析不可行吗?
我看到很多例子但是它们都会一次读入一个字节数组或256个字符,速度较慢。为什么呢?
直接将结果 Stream
值转换成字符串来解析不可行吗?
StreamReader.ReadToEnd()
。using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
你应该在流周围创建一个StreamReader
,然后调用ReadToEnd
。
你应该考虑调用WebClient.DownloadString
。
WebClient
和HttpWebRequest
使用原始HTTP协议,不涉及浏览器。如果不同的浏览器显示不同的"查看源代码"(View Source)结果,则可能是由于User-Agent
的问题造成的。 - SLaks正如@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();
}
Richard Schneider是正确的。 使用下面的代码从非UTF8字符集的站点获取数据会得到错误的字符串。
using (Stream stream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
String responseString = reader.ReadToEnd();
}
StreamReader
,然后调用StreamReader.ReadToEnd()
。StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
StreamReader
接受第二个参数Encoding.UTF8
。在查看微软文档时一开始没有注意到这一点。 - newprintGetResponse
和GetResponseStream
可能会抛出异常。 - PreguntonCojoneroCabrón