奇怪的HttpClient结果

时间:2016-04-29 13:43:08

标签: c# wpf httpclient

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

  

\ u001f \ B \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ U0003콋w8sΜmu〜SNT&安培; N g6 C Ͷ$ z%9igf [( \u0005 \u000f (: 6 \ u000f \bP C\ u0015 \n \u007f V \ u007f dh2_&安培;nj,呎\ u00177 \ u0019< N〜YoVY \ u0018M&GT ; SKP | ^ w9w2 \u06054Ƿ&安培; \u0015ƛXo\ u0014 [6瓦特\ u0011onVP \ u0005e \ u000e \ u05cal /⇝%UUS = 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ī\ U0002ڜUO】v XA {\ u0004Klo \ u0016%T \ u0006< {O = \ u0017 \ u0017 \ u0015%$ G \“Oϡ\ u007f ^̹hHq8\ u00016 \ u0015y {��S��4+�pb-\\eI�bB]^ \ {u001fĴՊX \ U0004 \u0001ºQD\ u001eK \ U0001; \ U0002 + Y ! \a \u001a (()>e ש r0T? \u001f Q 5t R \ u0005 \ u001f( 升\ u0013符\ v \ R- \ nU的߭_&安培; L> \ R0(N4))/ UC3 \< U \ u0013 \ u001f \u0002ȱ^ N6ד克/'ͧrP\ u001f \ f4y〜\ u0005 = V3 \ u001c; k \ U0002}'M \ u001ccoG_ \ u0003b4`

它要长得多,但复制所有内容(约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

1 个答案:

答案 0 :(得分:10)

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

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

request.AutomaticDecompression = DecompressionMethods.GZip;

这应该让你everything you need找出如何解压缩HttpClient版本的响应。