将表单发送到HTTP服务器(POST)

将数据发送到格式为HTML表单的服务器有两个主要功能。如果要从WWW系统迁移,请参阅下面的使用WWWForm。

使用IMultipartFormSection

为了更好地控制如何指定表单数据,UnityWebRequest系统包含一个用户可执行的IMultipartFormSection界面。对于标准应用程序,Unity还为数据和文件部分提供默认实现:MultipartFormDataSectionMultipartFormFileSection

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。 此功能,默认情况下,附加一个DownloadHandlerBufferUnityWebRequest。这是为了方便 - 您可以使用它来检查您的服务器的回复。 该函数读取由生成的原始数据,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!");
            }
        }
    }

🔚