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