将表单发送到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. }

?