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.
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:
WebRequest.Post(string url, List<IMultipartFormSection> formSections);
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.DownloadHandlerBuffer a laUnityWebRequest. Esto es por comodidad, puede usarlo para verificar las respuestas de su servidor.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.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.using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
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!");
}
}
}
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:
WebRequest.Post(string url, WWWForm formData);
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.DownloadHandlerBuffer a laUnityWebRequest. Esto es por comodidad, puede usarlo para verificar las respuestas de su servidor.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.using UnityEngine;
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!");
}
}
}