2016-04-29 8 views
3

Hitbox APIからデータを取得しようとすると、私は奇妙な結果に遭遇します。 1つのAPIのコマンドのために毎回発生します。結果は多かれ少なかれそうです(これは私が得た最後の結果です)。Strange HttpClientの結果

\ u001f \ b \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ u0003콋w 8 s Mmu 〜 s N t& N g6 C Ͷ$ z%9igf [ f \ \ b b u u uu u u u 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012 012^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Ƿ& \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↓/͋ | ; \ \ u u u 3 3 3 3 3 3 3 3 3 3 3 3 3] v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v XA {\ u0004Klo \ u0016%T \ u0006 < {O = \ u0017 \ u0017 \ u0015%$ GOϡ\ "\ u007f u001f {\ ^̹hHq8\ u00016 \ u0015y {��S��4+�pb-\\eI�bB]^ JՊX \ u0004 \u0001ºQD\ u001eK \ U0001; \ u0002 + Y ! \a \u001a (()> Lの\ u0013の\のV \ R- \ NU?߭_& L> \ R0(N4))/ UC3 \ < U \ u0013 \ u001f \ u0002 \ n6 \ n "" \ n "" \ n "" \ n "" \ n "" \ n "" \ u001cc oG _\u0003b 4 `

それはずっと長いですが、すべてをコピーするのは無意味です(約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

少し話題ですが、使用しないでください。代わりに、待っているキーボードを使用してください。 コンテキストを十分に注意していないと、結果をアンパックするためにawaitを使用することができない場合、.Resultを使用するとデッドロックが発生する可能性があります。 [非同期コードでブロックしない](http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html) –

+0

'Path.Combine'は、ファイルシステムのパスです。 URLを使用することを悪用すると、おそらく問題が発生します。 – spender

+0

@ KerimEmurlaよろしくお願いいたします。 –

答えて

6

応答はgzip圧縮された(これはリクエストでAccept-Encodingヘッダーで指定されていなかったにもかかわらずであるので、技術的に障害でありますサーバー)。

request.AutomaticDecompression = DecompressionMethods.GZip; 

これはHttpClientバージョンの応答を解凍する方法を見つけ出すためにあなたにeverything you needを与える必要があります:あなたが要求をオフに解雇する前に

あなたの第二の例は、以下の行を追加することによって固定することができます。