版本:Unity 6 (6000.0)
语言:英语
从 HTTP 服务器下载 AssetBundle (GET)
将原始数据上传到 HTTP 服务器 (PUT)

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

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

使用 IMultipartFormSection

为更加自如地控制表单数据指定方式,UnityWebRequest 系统包含一个用户可实现的 IMultipartFormSection 接口。对于标准应用程序,Unity 也会为数据和文件部分提供默认实现:MultipartFormDataSectionMultipartFormFileSection

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。因此,对 UnityWebRequest.POST 调用之后执行的 IMultipartFormSection 对象的改动不会反映在发送到服务器的数据中。

示例

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!");
        }
    }
}

使用 WWWForm(旧版功能)

为了帮助从 WWW 系统迁移,UnityWebRequest 系统允许您使用旧的 WWWForm 对象提供表单数据。

在这种情况下,函数签名为

UnityWebRequest.Post(string url, WWWForm formData);

详情

  • 此功能创建一个新的 UnityWebRequest,并将目标 URL 设置为第一个字符串参数的值。它还会读取 WWWForm 参数生成的任何自定义标头(如 Content-Type),并将其复制到 UnityWebRequest 中。
  • 默认情况下,此功能将 DownloadHandlerBuffer 附加到 UnityWebRequest。这是为了方便 - 您可以用它来检查服务器的回复。
  • 此函数读取由 WWWForm 对象 生成的原始数据并将其缓冲到 UploadHandlerRaw 对象中,该对象附加到 UnityWebRequest。因此,在调用 UnityWebRequest.POST 后对 WWWForm 对象所做的更改不会更改 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!");
        }
    }
}
从 HTTP 服务器下载 AssetBundle (GET)
将原始数据上传到 HTTP 服务器 (PUT)