2015-10-20 5 views
14

存在していない私はSOすぎに頼むよ応答がないように私はすでに、私はHTTPステータスを取得することはできないんだけど...WWW.responseHeader [「STATUSは」]

answers.unity3dに尋ねたが、 Windows Phone 8およびWindows RT 8.1のWWWオブジェクトの応答(IOS/Androidでは問題ありません)。

www.responseHeader["STATUS"]は存在せず、隠しフィールド_responseHeaderStringはresponseHeaderString最初の行

HTTP/1.1 200 OK


として含まれていません:

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 

responseHeader

{ 
    "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" 
} 

サンプルコード再現する:(空の新しいプロジェクトでテスト)

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 

を私は何かが足りないか、ですアムそれを確認できる人がいるバグのようですか?

編集:まだ お使いのネット​​ワーク・サーバは、おそらく各デバイスに異なる(予期しない)応答で応答している最新の5.3

+0

これはHTTP(S)要求であり、 'file://'または他のプロトコルではありません。ヘッダーはHTTPを示唆しますが、これらのことはいくつかの環境でエミュレートされる傾向があり、アンドロイド上で 'file://'プロトコルを使用する前にこの動作をしました。 –

+0

ファイルをダウンロードするのは簡単な 'http'要求なので、304/200の情報が必要です:) – Hacketo

+0

wwwオブジェクト.errorはエラーなしで戻ってきますか? –

答えて

1

でHTTPステータスを取得することはできません。ユーザーエージェント文字列などのさまざまな理由で、WWWクラスがSTATUSを取得しない可能性があります。

まず、プロキシをインストールして、電話機が送信する内容とサーバーの生の応答が正確にわかるようにします。 Charles Proxy(mac/windows)またはFiddler(windows)のいずれかが大きいです。

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

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

プロキシから、何が起こっているのか明確にする必要があり

はここユニティWWWクラスは状態を生成するために使用される実際のコードです。そうでない場合は、リクエストと応答をここに(生のままで)投稿してください。

+0

このコードは実際に' responseHeaderString'を 'text'として使用し、' responseHeaderString'はHTTPステータスを含んでいません。だから、ヘッダーの構成がこの条件を満たしていない可能性があるので、私はwiresharkで再確認しますが、応答は各デバイスで同じで、HTTPに準拠していると確信しています。 – Hacketo

+0

Unityはレスポンスを使いこなすので、 'responseHeaderString'は、サーバが何を送信しているかの真の指標ではないかもしれません。そのwiresharkのキャプチャを持つ – peterept

+0

は、それがプロキシとして実行され、あなたのWindowsの電話は、それを介して通信するように設定されていた?あなたはサーバーのURLを共有できますか? – peterept

0

STATUSヘッダーを探す前にwww.errorをお試しください。

// Construct the response object 
string error = www.error; 
if (error == null) { 
    if (www.responseHeaders.ContainsKey("STATUS")) { 
     string [] status=www.responseHeaders["STATUS"].Split(' '); 
     if (status.Length>2 && status[2] != "OK") { 
      error = www.responseHeaders["STATUS"]; 
     } 
    } 
} 
関連する問題