问题描述
我在使用 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);
}
结果有效
解决方法
最后,我找到了解决问题的方法。
在创建统一网络请求实例后添加这些代码
req.chunkedTransfer = false;
req.useHttpContinue = false;
我不知道为什么添加这些代码后它会起作用。
然而,我想出了预期的工作。