这是我的httpPost类:
public static IEnumerator httpPost(string path, string data, Action<APIHttpRequestModel> callback)
{
byte[] bodyRaw = new System.Text.UTF8Encoding().GetBytes(data);
var www = new UnityWebRequest(path, UnityWebRequest.kHttpVerbPOST);
www.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
www.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
www.SetRequestHeader("Content-Type", "application/json");
Debug.Log(www.uploadHandler.data); // This still returns the JSON string it's sending
yield return www.SendWebRequest();
if (www.isNetworkError)
{
Debug.Log("Something went wrong, and returned error: " + www.error);
callback(new APIHttpRequestModel(false, 400, www.error));
} else
{
Debug.Log(www.downloadHandler.text); // This returns empty because server isn't receiving any data
if (www.responseCode == 200)
{
callback(new APIHttpRequestModel(true, www.responseCode, www.downloadHandler.text));
Debug.Log(www.downloadHandler.text);
}
else
{
callback(new APIHttpRequestModel(false, www.responseCode, www.downloadHandler.text));
Debug.Log(www.downloadHandler.text);
}
}
}
我已经尝试调试,这是到目前为止iv所发现的:
TL; DR:代码正在到达端点,但是没有返回生产服务器上的数据(试图输出发送的数据),如果我在本地执行的话,它可以正常工作。如果我尝试使用REST客户端到生产服务器,那么它也可以正常工作。
编辑1:我下载了最新版本的unity,它似乎运行良好,因此,这绝对是与unity 2017.3.1f1相关的问题。
答案 0 :(得分:1)
显然这是某些版本的Unity中的错误(我使用的是2017.3.1f1版)
发生这种情况的原因是因为unity随请求一起发送了以下标头:“ Transfer-Encoding:chunked”,许多服务器无法处理。
添加www.chunkedTransfer = false;
可以解决此问题,并将其设置为Content-Length的标题
答案 1 :(得分:0)
chunkedTransfer解决方案对我不起作用。 但是实际上您可以使用WWW类而不是UnityWebRequest来执行相同的操作,对我来说这是实际的解决方案。