HTML フォームにフォーマットされたサーバーにデータを送信する 2 つの主要機能があります。WWW システムからの移行については、後述の WWWForm の使用 を参照してください。
フォームデータをどのように指定するかをより細かく制御するために、UnityWebRequest
システムにはユーザーによる実装可能な IMultipartFormSection
インターフェースが含まれています。 標準的なアプリケーションでは、Unity ではデータセクションとファイルセクションのデフォルト実装の MultipartFormDataSection
と MultipartFormFileSection
が利用できます。
多重定義である UnityWebRequest.POST
は 2 番目の引数として List 引数を受け取ります。List 引数のメンバーはすべて IMultipartFormSections
でなければなりません。関数のシグネチャは以下のとおりです。
WebRequest.Post(string url, List<IMultipartFormSection> formSections);
UnityWebRequest
を作成し、ターゲット URL を 1 番目の文字列のパラメーターに設定します。また、この関数は、UnityWebRequest
の Content-Type ヘッダーをIMultipartFormSection
オブジェクトのリストで指定されたフォームデータ用に、適切に設定します。DownloadHandlerBuffer
を UnityWebRequest
にアタッチします。これは便宜上のもので、これを利用してサーバーの応答を確認することができます。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!");
}
}
}
WWW システムから移行するために、UnityWebRequest システムでは古い WWWForm オブジェクトを使用してフォームデータを渡すことが可能です。
この場合、関数のシグネチャは以下のようになります。
WebRequest.Post(string url, WWWForm formData);
UnityWebRequest
を作成し、ターゲット URL を 1 番目の文字列引数の値に設定します。WWWForm
引数 (Content-Type など) で生成されたカスタムヘッダーも読み込み、UnityWebRequest
にコピーします。DownloadHandlerBuffer
を UnityWebRequest
にアタッチします。これは便宜上のもので、これを利用してサーバーの応答を確認することができます。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!");
}
}
}