奇怪的HttpClient结果

11

当尝试从Hitbox API获取数据时,我会得到奇怪的结果。对于一个API命令来说,每次都发生这种情况,而对于另一个命令则只有偶尔发生。结果大致如下(这是我最后得到的结果):

抱歉,这段文本似乎是乱码。请提供正确的中文文本以便我能够为您翻译。

我的代码用于获取Json结果:

string result;

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri(hitboxApiLink);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = client.GetAsync(requestString).Result;
    result = response.Content.ReadAsStringAsync().Result;
}

return result;

我之前使用过这个:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(Path.Combine(hitboxApiLink, requestString));
request.KeepAlive = false;
request.ContentType = "application/json; charset=utf-8";
WebResponse response = request.GetResponse();

using(StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
    result = reader.ReadToEnd();
}

当我使用Firefox获取数据时,它返回相同的结果。但是,当我尝试使用Google Chrome或Internet Explorer获取数据时,它返回正常的结果。API链接为:http://developers.hitbox.tv/

我尝试获取数据的链接为:https://api.hitbox.tv/media/live/list


1
有点跑题,但请不要使用.Result,而是使用await关键字。 如果您在上下文中不够小心,使用.Result可能会导致死锁,并且总体上不是一种好的实践,当您可以使用await来解压缩结果时。 不要在异步代码上阻塞 - Kerim Emurla
Path.Combine 用于文件系统路径。滥用它来处理 URL 可能会导致麻烦。 - spender
@KerimEmurla 好的,谢谢,我会修改的。 - Kuba Wasilczyk
@spender 我不再使用这段代码了。它主要是为了消除双斜杠。 - Kuba Wasilczyk
请在您的问题中包含响应头。 - jgauffin
显示剩余2条评论
1个回答

20

响应已被GZIP压缩(尽管请求中没有指定Accept-Encoding头部,因此在技术上是服务器的错误)。

您的第二个示例可以通过在发送请求之前添加以下行来修复:

request.AutomaticDecompression = DecompressionMethods.GZip;

这应该为您提供一切所需,以便弄清如何解压HttpClient版本的响应。


我使用HttpClient花费了数小时时间,但响应被压缩了?非常感谢@spender。 - M at
这帮助我解决了我的问题 - undefined

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