Version: 2019.4
Downloading an AssetBundle from an HTTP server (GET)
Uploading raw data to an HTTP server (PUT)

Enviando un formulario a un servidor HTTP (POST)

Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post and the FAQ.

Existen dos funciones principales para enviar datos a un servidor formateado como un formulario HTML. Si está migrando desde el sistema WWW, consulte Uso de WWWForm, a continuación.

Utilizando IMultipartFormSection

Para proporcionar un mayor control sobre cómo especificar los datos de su formulario, el sistema UnityWebRequest contiene una interfaz IMultipartFormSection` implementable por el usuario. Para aplicaciones estándar, Unity también proporciona implementaciones predeterminadas para secciones de datos y archivos: MultipartFormDataSectiony MultipartFormFileSection``.

Una sobrecarga de UnityWebRequest.POST acepta, como segundo parámetro, un argumento de lista, cuyos miembros deben ser todos IMultipartFormSections. La firma de la función es:

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

Detalles

  • Esta función crea un UnityWebRequest y establece la URL de destino en el primer parámetro de string. También establece el encabezado Content-Type de UnityWebRequest de forma adecuada para los datos del formulario especificados en la lista de objetosIMultipartFormSection.
  • Esta función, de forma predeterminada, adjunta un DownloadHandlerBuffer a laUnityWebRequest. Esto es por comodidad, puede usarlo para verificar las respuestas de su servidor.
  • Similar a la función WWWForm POST, esta función HLAPI llama a su vez cadaIMultipartFormSection suministrada y los formatea en una forma multiparte estándar como se especifica en RFC 2616.
  • Los datos del formulario preformateado se almacenan en un objeto estándar UploadHandlerRaw, que luego se adjunta a laUnityWebRequest. Como resultado, los cambios en los objetos IMultipartFormSection realizados después de la llamadaUnityWebRequest.POST no se reflejan en los datos enviados al servidor.

Ejemplo

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

Utilizando WWWForm (Función Legacy)

Para ayudar a migrar del sistema WWW, el sistema UnityWebRequest le permite a usted utilizar el anterior objeto WWWForm para proporcionar datos de formulario.

En este caso, la signature de la función es:

UnityWebRequest.Post(string url, WWWForm formData);

Detalles

  • Esta función crea un nuevo UnityWebRequest y establece la URL de destino al valor del primer argumento de cadena. También lee cualquier encabezado personalizado generado por el argumento WWWForm (como Content-Type) y los copia en elUnityWebRequest.
  • Esta función, de forma predeterminada, adjunta un DownloadHandlerBuffer a laUnityWebRequest. Esto es por comodidad, puede usarlo para verificar las respuestas de su servidor.
  • Esta función lee los datos sin procesar generados por el objeto WWWForm y los almacena en un objetoUploadHandlerRaw, que se adjunta a la UnityWebRequest. Por lo tanto, los cambios en el objeto WWWForm después de llamar aUnityWebRequest.POST no alteran el contenido de UnityWebRequest.

Ejemplo

using UnityEngine;
using UnityEngine.Networking;
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!");
        }
    }
}
Downloading an AssetBundle from an HTTP server (GET)
Uploading raw data to an HTTP server (PUT)