HttpClient不能在没有使用Fiddler的情况下解密HTTPS。

3
我不确定我的问题是否正确,但我找不到任何相关信息。我假设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.

我尝试禁用Fiddler中所有与https相关的选项,并重置IE代理选项,但似乎不起作用。

2个回答

5
事实证明我使用了错误的"Accept-Encoding"头部:
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
}

哈哈,我简直不敢相信我竟然忽略了这个。我以为AutomaticDecompression默认是启用的。谢谢! - crush

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接