我尝试使用Unity 2017.3从Unity脚本发送基本HTTP POST请求。我想发送一个图像数据,我可以在我的脚本中以file.png
或byte[]
的形式访问该数据。我只发布到运行Python / Django的本地服务器,服务器确实注册了POST请求 - 但无论我做什么,请求都会在我的网络应用程序中没有任何内容,正文,文件或原始数据。< / p>
IEnumerator WriteAndSendPng() {
#extra code that gets bytes from a render texture goes here
#can verify that drawing.png is a valid image for my purposes
System.IO.File.WriteAllBytes("drawing.png", bytes);
List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
formData.Add( new MultipartFormFileSection ("drawing", bytes, "drawing.png", "image/png") );
UnityWebRequest www = UnityWebRequest.Post("http://127.0.0.1:8000/predict/", formData);
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError) Debug.Log(www.error);
else Debug.Log("Form upload complete!");
}
我跟随the docs并且有a bunch of constructors for MultipartFormFileSection,其中大部分我觉得我已经尝试过了。还尝试了UploadHandlers或旧的AddBinaryField WWW API - 当请求到达我的应用程序时,请求仍然是空的...我已经阅读了对此SO票证的完整回复Sending http requests in C# with Unity。我在这里尝试了很多实现,但是再一次,Django收到了空请求。即使从Unity提交最简单的请求也会发送空请求。太奇怪了。
List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
formData.Add (new MultipartFormDataSection ("someVar=something"));
Python服务器只看到:
[11/Feb/2018 14:14:12] "POST /predict/ HTTP/1.1" 200 1
>>> print(request.method) # POST
>>> print(request.encoding) # None
>>> print(request.content_type) #multipart/form-data
>>> print(request.POST) # <QueryDict: {}>
>>> print(request.body) # b''
我认为这可能是一个Django问题,但是发布到同一个应用程序w / Postman或其他来源,它看到传入的数据就好了。最近有人这么做过吗?我认为这将是一块蛋糕,并进入它的许多小时我仍然受到阻碍。所有帮助赞赏!谢谢,全部。
答案 0 :(得分:0)
由documentation提供:“问题很可能是您的Django服务器不支持HTTP 1.1分块传输。您可以尝试更新服务器,也可以将UnityWebRequest上的chunkedTransfer属性设置为false。”
他是对的。将该标志设置为false允许我开始发送简单的测试用例数据并在Django应用程序中按预期接收 - 打赌我将能够立即获得图像。我也遇到了使用Python 3.5.x的副作用(错误地假设我需要)。升级也修复了块问题。干杯!