我正在尝试使用 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;
}
数据通过 gzip 压缩返回。通过在实例化
HttpClient
时启用此属性,您可以让 HttpClient
自动解压缩此数据:
private static readonly HttpClient httpClient = new HttpClient(new HttpClientHandler
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
});
我认为您必须从请求标头中删除 Brotli 压缩。 Brotli (br) 并未被 .Net 开箱即用地解码。
即改变:
httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
到
httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate");
我在这篇文章中提供了包含完整代码的解决方案,用于使用AutomaticDecompression解压缩Gzip、Deflate、Brotli或All。
注意:您甚至不必发送标头。