Version: 2019.4
言語: 日本語
HTTP サーバーからアセットバンドルをダウンロード (GET)
HTTP サーバーに生データをアップロード (PUT)

HTTP サーバーにフォームを送信 (POST)

ノート: UNet は非推奨となり、今後 Unity から削除される予定です。新しいシステムが開発中です。詳細は ブログFAQ を参照してください。

HTML フォームにフォーマットされたデータをサーバーに送信する 2 つの主要機能があります。WWW システムからの移行については、後述の WWWForm の使用 を参照してください。

IMultipartFormSection の使用

フォームデータをどのように指定するかをより細かく制御するために、UnityWebRequest システムにはユーザーにより実装可能な IMultipartFormSection インターフェースが含まれています。 標準的なアプリケーションでは、Unity はデータセクションとファイルセクションのデフォルト実装の MultipartFormDataSectionMultipartFormFileSection が利用できます。

多重定義である UnityWebRequest.POST は 2 番目の引数として List を受け取ります。List の要素はすべて IMultipartFormSections でなければなりません。関数のシグネチャは以下のとおりです。

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

詳細

  • この関数は UnityWebRequest を作成し、ターゲット URL を 1 番目の文字列のパラメーターに設定します。また、この関数は、UnityWebRequest の Content-Type ヘッダーをIMultipartFormSection オブジェクトのリストで指定されたフォームデータ用に、適切に設定します。
  • この関数は、デフォルトで DownloadHandlerBufferUnityWebRequest にアタッチします。これは便宜上のもので、これを利用してサーバーの応答を確認することができます。
  • 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("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!");
        }
    }
}

WWWForm の使用 (古い関数)

WWW システムから移行するために、UnityWebRequest システムでは古い WWWForm オブジェクトを使用してフォームデータを渡すことが可能です。

この場合、関数のシグネチャは以下のようになります。

UnityWebRequest.Post(string url, WWWForm formData);

詳細

  • この関数は新しい UnityWebRequest を作成し、ターゲット URL を 1 番目の文字列引数に設定します。WWWForm 引数 (Content-Type など) で生成されたカスタムヘッダーも読み込み、UnityWebRequest にコピーします。
  • この関数は、デフォルトで DownloadHandlerBufferUnityWebRequest にアタッチします。これは便宜上のもので、これを利用してサーバーの応答を確認することができます。
  • この関数は WWWForm オブジェクト によって生成された生データを読み込み、UnityWebRequest にアタッチされる UploadHandlerRaw オブジェクトにバッファリングします。したがって、UnityWebRequest.POST を呼び出した後に WWWForm オブジェクトを変更しても、UnityWebRequest の内容は変更されません。

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!");
        }
    }
}
HTTP サーバーからアセットバンドルをダウンロード (GET)
HTTP サーバーに生データをアップロード (PUT)