• 将表单发送到HTTP服务器(POST)
    • 使用IMultipartFormSection
    • 细节
    • 使用WWWForm(传统功能)
    • 细节

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

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

    使用IMultipartFormSection

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

    accept的重载UnityWebRequest.POST,作为第二个参数,一个List参数,其成员必须都是IMultipartFormSections。函数签名是:

    1. WebRequest.Post(string url, List<IMultipartFormSection> formSections);

    细节

    1. 该函数创建一个`UnityWebRequest`并将目标URL设置为第一个字符串参数。它还`UnityWebRequest``IMultipartFormSection`对象列表中指定的表单数据设置适当的Content-Type标头。
    2. 此功能,默认情况下,附加一个`DownloadHandlerBuffer``UnityWebRequest`。这是为了方便 - 您可以使用它来检查您的服务器的回复。
    3. WWWForm POST函数类似,这个HLAPI函数`IMultipartFormSection`依次调用每个提供的函数,并将它们格式化为RFC 2616中规定的标准多部分表单。
    4. 预先格式化的表格数据存储在标准UploadHandlerRaw对象中,然后附加到标准对象上UnityWebRequest。因此,调用IMultipartFormSection后执行的对象更改UnityWebRequest.POST不会反映在发送到服务器的数据中。

    1. using UnityEngine;
    2. using UnityEngine.Networking;
    3. using System.Collections;
    4. public class MyBehavior : MonoBehaviour {
    5. void Start() {
    6. StartCoroutine(Upload());
    7. }
    8. IEnumerator Upload() {
    9. List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
    10. formData.Add( new MultipartFormDataSection("field1=foo&field2=bar") );
    11. formData.Add( new MultipartFormFileSection("my file data", "myfile.txt") );
    12. UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", formData);
    13. yield return www.SendWebRequest();
    14. if(www.isNetworkError || www.isHttpError) {
    15. Debug.Log(www.error);
    16. }
    17. else {
    18. Debug.Log("Form upload complete!");
    19. }
    20. }
    21. }

    使用WWWForm(传统功能)

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

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

    1. WebRequest.Post(string url, WWWForm formData);

    细节

    该函数创建一个新的UnityWebRequest并将目标URL设置为第一个字符串参数的值。它还读取由WWWForm参数生成的任何自定义标头(如Content-Type)并将它们复制到UnityWebRequest。此功能,默认情况下,附加一个DownloadHandlerBufferUnityWebRequest。这是为了方便 - 您可以使用它来检查您的服务器的回复。该函数读取由生成的原始数据,WWWForm object并将其缓存UploadHandlerRaw到附加到该对象的对象中UnityWebRequest。因此,WWWForm调用后对象的更改UnityWebRequest.POST不会改变对象的内容UnityWebRequest

    1. using UnityEngine;
    2. using System.Collections;
    3. public class MyBehavior : public MonoBehaviour {
    4. void Start() {
    5. StartCoroutine(Upload());
    6. }
    7. IEnumerator Upload() {
    8. WWWForm form = new WWWForm();
    9. form.AddField("myField", "myData");
    10. UnityWebRequest www = UnityWebRequest.Post("http://www.my-server.com/myform", form);
    11. yield return www.SendWebRequest();
    12. if(www.isNetworkError || www.isHttpError) {
    13. Debug.Log(www.error);
    14. }
    15. else {
    16. Debug.Log("Form upload complete!");
    17. }
    18. }
    19. }

    ?