WWW.responseHeader[ "STATUS" ] 不存在



我已经问过了。unity3d,但由于没有响应,我也会问SO ..

我无法在Windows Phone 8和Windows RT 8.1上检索WWW对象响应的http状态(虽然它在IOS/Android上是ok的)。

www.responseHeader["STATUS"]不存在,并且隐藏字段_responseHeaderString不包含在第一行

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

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

是我遗漏了什么还是有人可以确认这是一个bug ?

编辑:

仍然无法使用最新的5.3

检索http状态

您的网络服务器可能对每个设备使用不同的(意外的)响应。由于各种原因,例如用户代理字符串,这可能导致WWW类无法获得STATUS。

首先,我会安装一个代理,这样你就可以确切地看到电话发送的内容和服务器的原始响应是什么。Charles Proxy (mac/windows)或Fiddler (windows)都很棒。

下面是Unity WWW类用来生成状态的实际代码:

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

裁判:https://github.com/MattRix/UnityDecompiled/blob/master/UnityEngine/UnityEngine/WWW.cs L483

从代理应该清楚正在发生什么。如果没有,请在这里发布请求和响应(原始)。

在查找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"];
        }
    }
}

相关内容

最新更新