没有 Fiddler,HttpClient 不会解密 HTTPS

soo*_*qua 3 c# https httpclient 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\0\0\0\0\0\u0002??i{??0??\u007f\u0005?c?c?\u0016" etc.
Run Code Online (Sandbox Code Playgroud)

我试图禁用 Fiddler 中所有与 https 相关的选项并重置 IE 代理选项,但似乎并非如此。

soo*_*qua 5

原来我有错误的 Accept-Encoding 标头:

Client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
Run Code Online (Sandbox Code Playgroud)

编辑:

您可以使用 "gzip, deflate" 编码,但您必须在HttpClientHandler 中指定解压缩方法:

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

using (var client = new HttpClient(handler))
{
    // your code
}
Run Code Online (Sandbox Code Playgroud)