如何让 HttpClient 正确解码这个站点

How to get HttpClient to correctly decode this site

我正在尝试读取某些 uri 的文本内容;基本

httpClient.GetStringAsync(uri);

适用于其他站点,但不适用于 https://abcapplepieoptiontrades.com(响应以 \u001f 开头,其中似乎混合了一些二进制字符)。该网站在 Web 浏览器和 fiddler 中显示正常。

然后我尝试了

using (HttpResponseMessage response = httpClient.GetAsync(uri).Result)
{
  var byteArray = response2.Content.ReadAsByteArrayAsync().Result;
  response = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
}

但这也不管用;结果与使用 httpClient.GetStringAsync() 时相同。我尝试了编码中列出的所有解码。*,其中 none 有效。如何获取此 Uri 的正确解码的文本内容?

起初我不认为@Nkosi 的建议会奏效,因为 Fiddler 对我自己的 httpclient 请求的响应的看法工作得很好(所以我认为这只是一个解码问题,如果能弄清楚如何Fiddler 成功解码了我的请求响应)。但是,在尝试之后,添加所有这些 headers 确实会导致 httpClient.GetStringAsync() 起作用。除了 User-Agent - Accept-Language、Accept、Accept-Encoding 之外,我还必须添加其他 headers。但最终,这奏效了。

编辑:我说得太早了。似乎有一大堆混淆的问题。我注意到在添加 headers 后问题再次发生,但仅针对某些网站(我认为都是 运行 IIS)。真正让我感到困惑的是,当 Fiddler 捕获流量时一切正常;如果不是,问题中描述的问题就会显现出来。

然后我发现引起问题的网站正在压缩它们的响应,而 httpClient 没有自动解压它。我修改了httpClient的创建如下:

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

这似乎解决了一些网站的问题,但不是全部。 然后我想起了,当我试图模仿网络浏览器的 headers 如上所述时,我使用了:

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

评论出来似乎解决了我所有的问题。