Version: 6000.3
语言: 中文
从 HTTP 服务器 (GET) 下载 AssetBundle
将原始数据上传到 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对象。
  • 默认情况下,此函数附加一个DownloadHandlerBufferUnityWebRequest. 这是为了方便起见 - 您可以使用它来检查服务器的回复。
  • 类似于WWWForm POST函数,此 HLAPI 函数调用每个提供的IMultipartFormSection并将它们格式化为 RFC 2616 中指定的标准多部分形式。
  • 预先格式化的表单数据存储在标准中UploadHandlerRaw对象,然后将其附加到UnityWebRequest. 因此,对IMultipartFormSectionUnityWebRequest.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!");
        }
    }
}

使用 WWWForm(旧版函数)

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

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

UnityWebRequest.Post(string url, WWWForm formData);

  • 此函数会创建一个新的UnityWebRequest并将目标 URL 设置为第一个字符串参数的值。它还读取由WWWForm参数(例如 Content-Type)并将它们复制到UnityWebRequest.
  • 默认情况下,此函数附加一个DownloadHandlerBufferUnityWebRequest. 这是为了方便起见 - 您可以使用它来检查服务器的回复。
  • 此函数读取由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!");
        }
    }
}
从 HTTP 服务器 (GET) 下载 AssetBundle
将原始数据上传到 HTTP 服务器 (PUT)