【发布时间】:2018-01-15 21:40:37
【问题描述】:
我看到了很多示例,但它们都将它们一次读入字节数组或 256 个字符,速度很慢。为什么?
将生成的Stream 值转换为我可以解析的字符串是否不可取?
【问题讨论】:
标签: c# .net string httpwebresponse
我看到了很多示例,但它们都将它们一次读入字节数组或 256 个字符,速度很慢。为什么?
将生成的Stream 值转换为我可以解析的字符串是否不可取?
【问题讨论】:
标签: c# .net string httpwebresponse
你可以使用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 可以抛出异常
您应该在流周围创建一个StreamReader,然后调用ReadToEnd。
您应该考虑改为致电WebClient.DownloadString。
【讨论】:
User-Agent。
<a href= 这样的东西,而不是旧的<A href=。这仍然与编码或User-Agent有关吗?
WebClient 和 HttpWebRequest 使用原始 HTTP,不涉及浏览器。如果不同的浏览器显示不同的查看源代码,这是User-Agent 问题。
正如@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();
}
" 我不能投票。所以写了这个。
【讨论】:
您可以在流周围创建StreamReader,然后调用StreamReader.ReadToEnd()。
StreamReader responseReader = new StreamReader(request.GetResponse().GetResponseStream());
var responseData = responseReader.ReadToEnd();
【讨论】: