【问题标题】:Strange HttpClient result奇怪的 HttpClient 结果
【发布时间】:2016-08-24 17:05:06
【问题描述】:

尝试从 Hitbox API 获取数据时,我得到一个奇怪的结果。对于一个 API 的命令,它每次都会发生,而另一个只是有时。结果或多或少是这样的(这是我得到的最后一个结果):

\u001f�\b\0\0\0\0\0\0\u0003콋w�8������s�Μmu�~��s��N�t&��N�g6 ��C��Ͷ$z%9igf��[(�\u0005�\u000f��(:�6����\u000f\b P�C\u0015\n�\u007f�V�\u007f� d��h����2_�&��Nj,������S������q�\u0017�7��\u0019。 S�kP��|^���w������9�w2��\u0605�4�Ƿ�&\u0015�ƛ��Xo�\u0014[�6w\u0011onVP\u0005�� e\u000e��\u05ca�l�/����⇝��%�u�u�s������=��k�w��z\u0003�a����SR,���s�1����ůdž��2~.6\u0006T>��fR��l�(���\u0017�GHoV�&/�m#�'\u0013�C�N/��E|Q�\u0012���3+�6\u0003z\u0012���q>�{�_��eW�7\u0016�rsIw\u0012\u0018&\u0017��V�\u000f�Ŀ\u001f������e�\u0002A��Zg��U\u0006��\\g\u0015�VP��u.E8Hj�LA���/͋�� |������;xk\u001e��ǣZ�\3y��\u00019\u0017... �{�\u0004�K�lo\u0016�%t\u0006���S��4+�pb-\\eI�bB]^\u001f��{��jՊx�\u0004��\u0001�º��QD��\u001eK\u0001;�\u0002+�� Y����!�\a��\u001a��(()>e��ש�r0T?��\u001f�Q���5t�R���� \u0005\u001f(���l \u0013�\v�\r-�\n�U???_��&�l>�\r0(N4))/����uc��3�\

它要长得多,但复制所有内容(大约 30000 个字符)是没有意义的。

我用来获取 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();
}

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

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

【问题讨论】:

  • 有点离题,但请不要使用 .Result 而是使用 await 关键字。如果您对上下文不够小心,使用 .Result 可能会导致死锁,并且当您可以使用 await 解压缩结果时,总体而言这不是一个好习惯。 Don't Block on Async Code
  • Path.Combine 用于文件系统路径。滥用它与 URL 一起使用可能会导致麻烦。
  • @KerimEmurla 好的,谢谢,我会改变的。
  • @spender 我不再使用此代码了。主要是为了消除双斜线。
  • 在您的问题中包含响应标头

标签: c# wpf httpclient


【解决方案1】:

响应是 GZIPped(即使请求中的 Accept-Encoding 标头未指定此响应,因此从技术上讲是服务器上的故障)。

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

request.AutomaticDecompression = DecompressionMethods.GZip;

这应该让您everything you need 弄清楚如何解压缩HttpClient 版本的响应。

【讨论】:

  • 我在使用 HttpClient 时花了几个小时在这上面并且响应被压缩了?非常感谢@spender
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2012-12-16
  • 2012-12-06
  • 2018-01-24
  • 2021-03-01
  • 2014-08-17
  • 1970-01-01
相关资源
最近更新 更多