HttpClient 在没有 Fiddler 的情况下不解密 HTTPS

HttpClient does not decrypt HTTPS without Fiddler

我不确定我的问题是否正确,但我找不到任何相关信息。我假设 HttpClient 应该自动解密 HTTPS 响应,但出于某种原因,它不会,除非 Fiddler 是 运行.

HttpClient Client;
HttpResponseMessage response;

using (var request = new HttpRequestMessage(HttpMethod.Get, "https://www.google.com/"))
{
    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));

    response = await Client.SendAsync(request);
    response.EnsureSuccessStatusCode();
}

string sResponse = await response.Content.ReadAsStringAsync();
Log(sResponse); // "\u001f�\b[=10=][=10=][=10=][=10=][=10=]\u0002��i{۸�0��\u007f\u0005͜c�c�\u0016" etc.

我试过在Fiddler中禁用所有https相关选项并重置IE代理选项,但似乎不是这样。

原来是我看错了Accept-Encoding header:

Client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");

编辑:

您可以使用 "gzip, deflate" 编码,但您必须在 HttpClientHandler:

中指定解压缩方法
HttpClientHandler handler = new HttpClientHandler()
{
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};

using (var client = new HttpClient(handler))
{
    // your code
}

删除 request.Headers.Add("Accept-Encoding", "gzip, deflate, br"); 那么响应将不会被编码。