HttpClient 响应返回乱码数据

问题描述 投票:0回答:3

我正在尝试使用 HttpClient 从此 URL 获取正确的 JSON 响应。当我在 Chrome 中查看 URL 时,数据是正确格式的 JSON。当我使用 HttpClient 时,我收到一堆看起来像字节或类似内容的垃圾数据。我不知道如何将其解码为字符串。请指教。

string url = "https://api.nasdaq.com/api/calendar/earnings?date=2010-07-30";

string calendar = await DownloadFile(new string[] { url });

private static readonly HttpClient httpClient = new HttpClient();

        public static async Task<string> DownloadFile(string[] args)
        {
            string url = args[0];

            httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
            httpClient.DefaultRequestHeaders.Connection.ParseAdd("keep-alive");

            string text = await httpClient.GetStringAsync(url);
            
            return text;

        }
c# encoding httpclient webresponse
3个回答
5
投票

数据通过 gzip 压缩返回。通过在实例化

HttpClient
时启用此属性,您可以让
HttpClient
自动解压缩此数据:

    private static readonly HttpClient httpClient = new HttpClient(new HttpClientHandler
    {
        AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
    });

0
投票

我认为您必须从请求标头中删除 Brotli 压缩。 Brotli (br) 并未被 .Net 开箱即用地解码。

即改变:

httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");

httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate");

0
投票

我在这篇文章中提供了包含完整代码的解决方案,用于使用AutomaticDecompression解压缩GzipDeflateBrotliAll

注意:您甚至不必发送标头。

https://stackoverflow.com/a/77551050/3944285

© www.soinside.com 2019 - 2024. All rights reserved.