将表单发送到HTTP服务器(POST)
将数据发送到格式为HTML表单的服务器有两个主要功能。如果要从WWW系统迁移,请参阅下面的使用WWWForm。
使用IMultipartFormSection
为了更好地控制如何指定表单数据,UnityWebRequest
系统包含一个用户可执行的IMultipartFormSection
界面。对于标准应用程序,Unity还为数据和文件部分提供默认实现:MultipartFormDataSection
和MultipartFormFileSection
。
accept
的重载UnityWebRequest.POST
,作为第二个参数,一个List参数,其成员必须都是IMultipartFormSections
。函数签名是:
WebRequest.Post(string url, List<IMultipartFormSection> formSections);
细节
• 该函数创建一个`UnityWebRequest`并将目标URL设置为第一个字符串参数。它还`UnityWebRequest`为`IMultipartFormSection`对象列表中指定的表单数据设置适当的Content-Type标头。
• 此功能,默认情况下,附加一个`DownloadHandlerBuffer`到`UnityWebRequest`。这是为了方便 - 您可以使用它来检查您的服务器的回复。
• 与WWWForm POST函数类似,这个HLAPI函数`IMultipartFormSection`依次调用每个提供的函数,并将它们格式化为RFC 2616中规定的标准多部分表单。
• 预先格式化的表格数据存储在标准UploadHandlerRaw对象中,然后附加到标准对象上UnityWebRequest。因此,调用IMultipartFormSection后执行的对象更改UnityWebRequest.POST不会反映在发送到服务器的数据中。
例
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class MyBehavior : MonoBehaviour {
void Start() {
StartCoroutine(Upload());
}
IEnumerator Upload() {
List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
formData.Add( new MultipartFormDataSection("field1=foo&field2=bar") );
formData.Add( new MultipartFormFileSection("my file data", "myfile.txt") );
UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", formData);
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError) {
Debug.Log(www.error);
}
else {
Debug.Log("Form upload complete!");
}
}
}
使用WWWForm(传统功能)
为了帮助从WWW系统迁移,UnityWebRequest
系统允许您使用旧的WWWForm对象来提供表单数据。
在这种情况下,函数签名是:
WebRequest.Post(string url, WWWForm formData);
细节
该函数创建一个新的UnityWebRequest
并将目标URL设置为第一个字符串参数的值。它还读取由WWWForm
参数生成的任何自定义标头(如Content-Type)并将它们复制到UnityWebRequest
。此功能,默认情况下,附加一个DownloadHandlerBuffer
到UnityWebRequest
。这是为了方便 - 您可以使用它来检查您的服务器的回复。该函数读取由生成的原始数据,WWWForm object并将其缓存UploadHandlerRaw
到附加到该对象的对象中UnityWebRequest
。因此,WWWForm
调用后对象的更改UnityWebRequest.POST
不会改变对象的内容UnityWebRequest
。
例
using UnityEngine;
using System.Collections;
public class MyBehavior : public MonoBehaviour {
void Start() {
StartCoroutine(Upload());
}
IEnumerator Upload() {
WWWForm form = new WWWForm();
form.AddField("myField", "myData");
UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", form);
yield return www.SendWebRequest();
if(www.isNetworkError || www.isHttpError) {
Debug.Log(www.error);
}
else {
Debug.Log("Form upload complete!");
}
}
}
?