2015-10-20 14 views
14

ich bereits auf answers.unity3d gefragt, aber da es keine Antwort werde ich SO fragen auf ..WWW.responseHeader [ „STATUS“] existiert nicht

ich nicht in der Lage bin, den http Status eines abrufen Antwort auf dem Objekt WWW auf Windows Phone 8 und Windows RT 8.1 (während es auf IOS/Android ist in Ordnung).

www.responseHeader["STATUS"] nicht existiert und das verborgene Feld _responseHeaderString enthält nicht als erste Zeile

HTTP/1.1 200 OK


responseHeaderString:

Server: nginx 
Date: Wed, 21 Oct 2015 07:44:36 GMT 
Last-Modified: Mon, 07 Sep 2015 11:43:46 GMT 
Connection: keep-alive 
Expires: Fri, 20 Nov 2015 07:44:36 GMT 
Cache-Control: max-age=2592000 
Cache-Control: public 

response:

{ 
    "SERVER"  : "nginx" 
    "DATE"   : "Wed, 21 Oct 2015 07:44:36 GMT" 
    "LAST-MODIFIED": "Mon, 07 Sep 2015 11:43:46 GMT" 
    "CONNECTION" : "keep-alive" 
    "EXPIRES"  : "Fri, 20 Nov 2015 07:44:36 GMT" 
    "CACHE-CONTROL": "public" 
} 

Beispielcode zu reproduzieren: (auf nüchternen neues Projekt getestet)

WWW www = new WWW("http://www.google.com"); 

yield return www; 

Debug.Log("Google Status : " + www.responseHeaders.ContainsKey("STATUS")); // False 
Debug.Log(www.text); // <doctype ... 
Debug.Log(www.responseHeaders["STATUS"]); // KeyError 

Bin ich etwas fehlt oder ist da kann jemand das bestätigen ist wie ein Fehler?

Edit: noch nicht in der Lage, den HTTP-Status mit den neuesten 5.3

+0

Nur zu überprüfen - das ist eine HTTP (S) -Anforderung, und nicht ein 'file: //' oder anderes Protokoll? Der Header würde HTTP vorschlagen, aber diese Dinge neigen dazu, in einigen Umgebungen emuliert werden, und ich hatte dieses Verhalten zuvor bei Verwendung eines 'file: //' -Protokolls auf Android. –

+0

es ist eine einfache 'http' Anfrage zum Herunterladen einer Datei, also brauche ich 304/200 Informationen :) – Hacketo

+0

Ist Ihr WWW-Objekt .Fehler ohne Fehler zurück? –

Antwort

1

Ihrem Netzwerk-Server für jedes Gerät mit einer anderen (unerwarteten) Antwort reagiert wahrscheinlich abzuzurufen. Aus verschiedenen Gründen, z. B. der Zeichenfolge des Benutzeragenten, die dazu führen könnte, dass die WWW-Klasse nicht den Status STATUS erhält.

Erstens würde ich einen Proxy installieren, so dass Sie genau sehen können, was das Telefon sendet und was die Serverrohantwort ist. Entweder Charles Proxy (Mac/Windows) oder Fiddler (Windows) sind großartig.

Hier ist der eigentliche Code, der Unity WWW-Klasse-Status zu erzeugen, mit:

 if (num++ == 0 && text.StartsWith("HTTP")) 
     { 
      dictionary["STATUS"] = text; 
     } 

Ref: https://github.com/MattRix/UnityDecompiled/blob/master/UnityEngine/UnityEngine/WWW.cs#L483

Vom Proxy sollte es klar sein, was geschieht. Falls nicht, posten Sie die Anfrage und die Antwort hier (als Rohdatei).

+0

dieser Code tatsächlich verwenden' responseHeaderString' als 'text', und' responseHeaderString' enthält nicht HTTP-Status. Die Header-Konstruktion füllt diese Bedingung möglicherweise nicht. Ich überprüfe noch einmal, ob ich mit Wireshark kann, aber ich bin mir sicher, dass die Antwort für jedes Gerät gleich ist und HTTP-konform ist. – Hacketo

+0

Unity vermischte sich mit der Antwort, so dass "responseHeaderString" möglicherweise keine echte Anzeige dessen ist, was der Server sendet. – peterept

+0

mit diesem wireshark Capture, lief es als Proxy und Ihr Windows Phone wurde eingestellt, um über sie zu kommunizieren? Können Sie die Server-URL teilen? – peterept

0

Versuchen Sie, den www.error zu lesen, bevor Sie nach dem STATUS-Header suchen.