包含此页的版本:
不含此页的版本:
将数据发送到格式化为 HTML 表单的服务器有两个主要功能。如果您要从 WWW 系统迁移过来,请参阅下面的使用 WWWForm。
为了更好地控制表单数据的指定方式,请UnityWebRequest系统包含一个用户可实现的IMultipartFormSection接口。 对于标准应用程序,Unity 还提供了数据和文件部分的默认实现:MultipartFormDataSection和MultipartFormFileSection.
重载UnityWebRequest.POST接受 List 参数作为第二个参数,其成员必须全部为IMultipartFormSections. 函数签名为:
UnityWebRequest.Post(string url, List<IMultipartFormSection> formSections);
UnityWebRequest并将目标 URL 设置为第一个字符串参数。它还设置了UnityWebRequest适当地用于列表中指定的表单数据IMultipartFormSection对象。DownloadHandlerBuffer到UnityWebRequest. 这是为了方便起见 - 您可以使用它来检查服务器的回复。WWWForm POST函数,此 HLAPI 函数调用每个提供的IMultipartFormSection并将它们格式化为 RFC 2616 中指定的标准多部分形式。UploadHandlerRaw对象,然后将其附加到UnityWebRequest. 因此,对IMultipartFormSection在UnityWebRequest.POST调用不会反映在发送到服务器的数据中。using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using System.Collections.Generic;
public class MyBehavior : MonoBehaviour
{
void Start()
{
StartCoroutine(Upload());
}
IEnumerator Upload()
{
var formData = new List<IMultipartFormSection>();
formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
formData.Add(new MultipartFormFileSection("my file data", "myfile.txt"));
using var www = UnityWebRequest.Post("https://www.my-server.com/myform", formData);
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(www.error);
}
else
{
Debug.Log("Form upload complete!");
}
}
}
为了帮助从 WWW 系统迁移,UnityWebRequest 系统允许您使用旧的 WWWForm 对象来提供表单数据。
在这种情况下,函数签名为:
UnityWebRequest.Post(string url, WWWForm formData);
UnityWebRequest并将目标 URL 设置为第一个字符串参数的值。它还读取由WWWForm参数(例如 Content-Type)并将它们复制到UnityWebRequest.DownloadHandlerBuffer到UnityWebRequest. 这是为了方便起见 - 您可以使用它来检查服务器的回复。WWWForm object并将其缓冲在UploadHandlerRaw对象,它附加到UnityWebRequest. 因此,对WWWForm调用后对象UnityWebRequest.POST不要更改UnityWebRequest.using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class MyBehavior : MonoBehaviour {
void Start() {
StartCoroutine(Upload());
}
IEnumerator Upload() {
WWWForm form = new WWWForm();
form.AddField("myField", "myData");
using var www = UnityWebRequest.Post("https://www.my-server.com/myform", form);
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success) {
Debug.Log(www.error);
}
else {
Debug.Log("Form upload complete!");
}
}
}