我不确定我的问题是否正确,但我找不到任何相关信息。我假设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代理选项,但似乎并非如此。
答案 0 :(得分:3)
事实证明我接受了错误的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
}
答案 1 :(得分:0)
删除request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
那么响应就不会被编码。