gpt4 book ai didi

c# - HttpClient 返回特殊字符但没有可读性

转载 作者:太空狗 更新时间:2023-10-30 00:31:00 25 4
gpt4 key购买 nike

我正在尝试使用 async 和 await 以及 HttpClient 下载网页,但我只得到一个充满特殊字符的字符串......代码就像......

static async void DownloadPageAsync(string url)
{
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var responseStream = await response.Content.ReadAsStreamAsync();
var streamReader = new StreamReader(responseStream);
var str = streamReader.ReadToEnd();

}

网址是

url = @"http://www.nseindia.com/live_market/dynaContent/live_watch/live_index_watch.htm";

当我做的时候

client.DefaultRequestHeaders.Add("User-Agent",
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2;
WOW64; Trident/6.0)");

代替那四个 DefaultRequestHeaders,我得到了一个 403 错误,但这是 nse 站点并且对所有人免费。请帮助 friend 让我得到正确的答复..问候

斯利瓦斯塔瓦

最佳答案

client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");

通过这个你告诉服务器你允许它压缩响应 gzip/deflate .所以响应实际上是经过压缩的,这就解释了为什么您会得到那种响应文本。

如果你想要纯文本,你不应该添加标题,这样服务器就不会压缩响应。如果您删除上面的行,您将得到一个正常的 HTML 响应文本。

或者,您当然可以保留该 header 并使用 GZipStream 解压缩响应收到后。那会像这样工作:

using (var responseStream = await response.Content.ReadAsStreamAsync())
using (var deflateStream = new GZipStream(responseStream, CompressionMode.Decompress))
using (var streamReader = new StreamReader(deflateStream))
{
var str = streamReader.ReadToEnd();
Console.WriteLine(str);
}

理想情况下,您应该检查 response.Content.Headers.GetValues("Content-Encoding") 的值以确保编码为 gzip。由于您还接受了 deflate 作为可能的编码,因此您可以使用 DeflateStream解码它;或者在缺少 Content-Encoding header 的情况下不解码任何内容。

关于c# - HttpClient 返回特殊字符但没有可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com