UnityWebRequest 在某些 urls 响应中无法接收数据

问题描述

我在使用 UnityWebRequest 时遇到了一些问题。

我有几个 URL 可以与我的服务器通信。 一些网址可以正常工作,而其他一些网址则不能正常工作。

奇怪的是,任何 unity 和我的服务器都没有错误。我的服务器正常响应状态为 200,但 Unity 客户端无法从服务器接收任何数据。 (后来在控制台中显示了统一编辑器 curl 错误 42 回调中止)所以我在 POSTMAN、Restlet Client、Curl 上测试了我的服务器,甚至在 javascript 上测试了 Axios。它运行良好。 我认为响应数据大小与这个问题无关,因为其他工作 URL 数据比响应数据大小大得多

我不知道为什么 UnityWebRequest 在某些 URL 响应中无法接收任何数据。

我使用 spring 框架和统一客户端版本的 Web 服务器是 2019.2.12f1,我尝试了 2019.3.0.f1 但它也不起作用。

我认为服务器没有问题,因为服务器响应 200 并完成通信。

感谢阅读我的问题,请给我一些解决此问题的建议。

更新:

这是我的请求代码

private IEnumerator SendPutRequest() {
    var req = new UnityWebRequest("not/wokring/uri") {
        downloadHandler = new DownloadHandlerBuffer(),uploadHandler = new             UploadHandlerRaw(Encoding.UTF8.GetBytes(requestBody)) {
                    contentType = "application/json"
                }
            };
    req.SetRequestHeader("Authorization","ACCESS TOKEN");
    req.method = UnityWebRequest.kHttpVerbPUT;

    yield return req.SendWebRequest();

    Logger.Debug(this,req.downloadHandler.text);
}

更新2:

这里是测试调用其他api(https://randomuser.me/api/)

    private IEnumerator SendTestRequest() {
            var req = new UnityWebRequest("https://randomuser.me/api/") {
                downloadHandler = new DownloadHandlerBuffer()
            };
            req.method = UnityWebRequest.kHttpVerbGET;

            yield return req.SendWebRequest();

            Logger.Debug(this,req.downloadHandler.text);
        }

并且工作正常Result

并且没有工作请求

这里是请求正文 json

[{'complex-data'}]

这是代码

private IEnumerator SendBookResult() {
            var req = new UnityWebRequest("http://not/wokring/uri") {
                downloadHandler = new DownloadHandlerBuffer(),uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(bookSolveBody)) {
                    contentType = "application/json"
                }
            };
            req.SetRequestHeader("Authorization",Token);
            req.method = UnityWebRequest.kHttpVerbPUT;

            yield return req.SendWebRequest();

            Logger.Debug(this,req.downloadHandler.text);
}

这里是响应服务器日志

    2021-03-30 15:52:01.768 DEBUG [user-resource-service,141475988d7477c7,835066c63711dc29,true] 40897 --- [ctor-http-nio-4] o.s.w.s.adapter.HttpWebHandlerAdapter    : [9651973a-15] Completed 200 OK

他们没有结果并得到错误 enter image description here

和工作网址..

代码

private IEnumerator SendBookProblems() {
            var req = new UnityWebRequest("http://wokring/uri") {downloadHandler = new DownloadHandlerBuffer()};
            req.SetRequestHeader("Authorization",Token);
            req.method = UnityWebRequest.kHttpVerbGET;
            yield return req.SendWebRequest();
            Debug.Log(req.downloadHandler.text);
}

结果有效

Result

解决方法

最后,我找到了解决问题的方法。

在创建统一网络请求实例后添加这些代码

req.chunkedTransfer = false;
req.useHttpContinue = false;

我不知道为什么添加这些代码后它会起作用。

然而,我想出了预期的工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...