【问题标题】:UnityWebRequest cannot receive data in some urls responseUnityWebRequest 在某些 url 响应中无法接收数据
【发布时间】:2021-03-30 06:06:27
【问题描述】:

我对@9​​87654325@ 有一些问题。

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

奇怪的是,任何统一和我的服务器都没有错误。我的服务器正常响应状态为 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

【问题讨论】:

  • 你能在这里发布你的 UnityWebRequest 代码吗?以及您的网址,以便我们可以复制问题。
  • @ArtZolinaIII 更新请求代码,我在本地主机上使用我的服务器,所以你需要我的网址吗?当我更改 url 另一个 ex (a/b) 时也没有工作
  • 这在你的本地主机之外的其他服务器上工作吗?
  • 是的,即使是本地主机中的其他 URL 或其他服务器,它也是完美的工作代码,我将更新请求正文和邮递员结果
  • 为什么不使用 UnityWebRequest.kHttpVerbGET?你想从服务器抓取数据吗?

标签: unity3d web unitywebrequest


【解决方案1】:

终于,我找到了解决问题的方法。

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

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

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

但是,我想出按预期工作。

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多