版本:2022.3
语言: 英文
从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()
    {
        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("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");
     
        UnityWebRequest 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)