http - 使用 UnityWebRequest 的响应代码为 0 的通用/未知 HTTP 错误

标签 http unity3d unity-webgl

我正在尝试使用一些服务器的API函数,突然出现了这个错误。我将在代码示例之后进行解释:

public IEnumerator Post(Dictionary<string, string> data)
    {
        var request = UnityWebRequest.Post(Url, data);
        request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        yield return request.Send();

        if (request.isError)
           UpdateNetworkLog("Network error has occured: " + request.error);
        else
            // Some code after success
    }

如您所见,考虑到 POST 请求,我主要从 Unity 手册中获取它 here .但是,有一个问题 - 请求从未正确完成,它总是有错误(使用 UpdateNetworkLog 函数显示):“通用/未知 HTTP 错误”,而请求的响应代码为 0。此外,我尝试使用旧版本手册和 WWW 类中的方法得到相同的结果。

我认为,问题在于 Unity 如何获得响应:我已经通过 Wireshark 检查数据包,我的 POST 请求和服务器的响应都非常好,没有错误或错误。

另一个重要的问题是我正在使用 WebGL,在编辑器中一切正常,程序得到正确的响应并正常工作;只有在我在浏览器中构建并运行游戏后才会出现错误(已在 Chrome 和 Safari 中测试)。此外,尝试不使用 Unity WebGL Player 启动它,而是使用 XAMPP:相同。

感谢所有 future 的回复,因为谷歌对此一无所知。

最佳答案

潜在解决方案 1

来自Unity documentation关于将 UnityWebRequest 与 WebGL 结合使用:

The WWW and UnityWebRequest classes are supported in WebGL. They are implemented using the XMLHttpRequest class in JavaScript, using the browser to handle WWW requests. This imposes some security restrictions on accessing cross-domain resources. Basically any WWW request to a server which is different from the server hosting the WebGL content needs to be authorized by the server you are trying to access. To access cross-domain WWW resources in WebGL, the server you are trying to access needs to authorize this using CORS.

我最好的猜测是您尝试访问的服务器没有正确设置或配置 CORS。当您的代码在浏览器中运行时,浏览器本身会处理请求并因此使您的代码受制于该浏览器的安全限制。您的程序和服务器不在同一个域中,浏览器不喜欢这样。

如果这是您的问题,那么在没有更多信息的情况下,我很难提出解决方案。从你的帖子来看,你可能对编码(或至少对 HTTP 相关编码)比较陌生,我能找到的解决你问题的最佳方法涉及一些相对复杂的方法,例如 using JavaScript而不是 UnityWebRequest

潜在解决方案 2

当然,实际问题甚至可能出在您周围的代码上,或者出在您尝试访问的服务器上。调用 Post() 的函数的代码是什么?仅当代码在浏览器中运行时(JavaScript 正在处理 POST 请求)才显示的事件顺序可能存在一些问题。

附带说明一下,如果您尝试访问的服务器有其 API 的文档,您的问题可能会在其中某处得到解决。

关于http - 使用 UnityWebRequest 的响应代码为 0 的通用/未知 HTTP 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44723518/

相关文章:

java - 不关闭 URLConnection

http - 限制网络服务器响应 GET 请求可以返回的数据长度

java - 使用 Apache Http 异步客户端通过多部分 POST 请求上传文件

c# - move 玩家然后改变场景

c# - RuntimeInitializeOnLoad 未使用条件编译运行

javascript - 从 UnityWebGL jslib 返回字符串

Python-请求关闭 http 连接

unity3d - unity 刚体恒速

c# - Application.streamingAssetsPath 和 WebGL 构建

javascript - 如何从jslib插件Unity webgl调用外部javascript函数