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

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

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

IMultipartFormSection の使用

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

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

WebRequest.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 System.Collections;
using Unity.Networking;
 
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.Send();
 
        if(www.isError) {
            Debug.Log(www.error);
        }
        else {
            Debug.Log("Form upload complete!");
        }
    }
}

WWWForm の使用 (古い関数)

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

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

WebRequest.Post(string url, WWWForm formData);

詳細

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

using UnityEngine;
using System.Collections;
 
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.Send();
 
        if(www.isError) {
            Debug.Log(www.error);
        }
        else {
            Debug.Log("Form upload complete!");
        }
    }
}
HTTP サーバーからアセットバンドルをダウンロード (GET)
HTTP サーバーに生データをアップロード (PUT)