2016-04-29 20 views
3

Beim Versuch, Daten von einer Hitbox-API zu erhalten, bekomme ich ein seltsames Ergebnis. Bei einem einzigen API-Befehl passiert es jedes Mal, bei dem anderen nur manchmal. Das Ergebnis mehr oder weniger so (das ist das letzte Ergebnis, das ich bekommen haben):Seltsames HttpClient-Ergebnis

\ u001f \ b \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ U0003 콋 w8 0s Μ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 < n ~ YoVY \ u0018M> S kP |^ w 9 w2 \ u0605 4 Ƿ & \ u0015ƛXo \ u0014 [6W \ 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 i \ u0002 ڜ u O] v XA {\ u0004Klo \ u0016% t \ U0006 < {o = \ u0017 \ u0017 \ u0015% $ G \ "Oϡ \ u007f^̹hHq8 \ u00016 \ u0015y {��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- \ nU? ߭_ & l> \ r0 (N4))/UC3 \ < U \ u0013 \ u001f \ u0002ȱ ^n6 ד g/' ͧ rP \ u001f \ f4y ~ \ u0005 = V3 \ u001c; k \ u0002} ' m \ u001cc oG _ \ u0003b 4 `

Es ist viel viel länger, aber es ist sinnlos alles davon (etwa 30000 Zeichen) zu kopieren.

Mein Code, den ich verwende, um das Ergebnis zu erhalten json ist:

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; 

ich das schon verwendet:

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(); 
} 

Und es gibt das gleiche. Aber wenn ich versuche, Daten mit Google Chrome oder Internet Explorer zu erhalten, gibt es das normale Ergebnis zurück. Die api ist: http://developers.hitbox.tv/

Der Link Ich versuche, Daten zu erhalten, stammt von: https://api.hitbox.tv/media/live/list

+1

Ein wenig off topic, aber bitte verwenden .RESULT nicht und nutzen die abwarten statt keywoard. Die Verwendung von .Result kann einen Deadlock verursachen, wenn Sie nicht sorgfältig genug mit dem Kontext umgehen und es insgesamt keine gute Übung ist, wenn Sie mit hold das Ergebnis entpacken können. [Nicht auf Async-Code blockieren] (http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html) –

+0

'Path.Combine' ist für Dateisystempfade. Missbrauch für die Verwendung mit URLs wird wahrscheinlich zu Schwierigkeiten führen. – spender

+0

@KerimEmurla Ok danke ich werde das ändern. –

Antwort

6

Die Antwort ist gzipped (auch wenn dies nicht durch ein Accept-Encoding-Header in der Anfrage angegeben wurde, so ist technisch ein Fehler auf der Server).

Ihr zweites Beispiel kann durch Hinzufügen der folgenden Zeile festgelegt werden, bevor Sie die Anfrage abfeuern:

request.AutomaticDecompression = DecompressionMethods.GZip; 

Dies sollten Sie everything you need geben, um herauszufinden, wie die Reaktion der HttpClient Version zu dekomprimieren.