はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】UnityWebRequestでBASIC認証をする方法

はじめに

今回はUnityWebRequestでBASIC認証をする方法について紹介をしたいと思います。

docs.unity3d.com

概要

UnityWebRequestにヘッダー情報を追加するためにはUnityWebRequest.SetRequestHeaderを利用します。

public void SetRequestHeader (string name, string value);

HTTP リクエストヘッダーをカスタムの値にセットします。

Header keys and values must be valid according to HTTP protocol specification. Neither string may contain certain illegal characters, such as control characters. Both strings must be non-null and contain a minimum of 1 character. For more information, see HTTP specifications.

このメソッドは Send が呼び出された後に呼び出すことはできません。

Networking.UnityWebRequest-SetRequestHeader - Unity スクリプトリファレンス

またBASIC認証をする際はAUTHORIZATIONというヘッダーのキーに対して、usernamepasswordの値を設定する必要があるのですが、ちょっとめんどくさい処理をかかないとダメです。

string basicUserName = "username";
string basicPassword = "password";
string authorization = $"Basic {Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes($"{basicUserName}:{basicPassword}"))}";
unityWebRequest.SetRequestHeader("AUTHORIZATION", authorization);

実験

さくらのレンタルサーバーさんがBASIC認証テストのサイトを公開してくれていたので、そちらで実験してみたいと思います。
leggiero.sakura.ne.jp

string url = "https://leggiero.sakura.ne.jp/xxxxbasic_auth_testxxxx/secret/kaiin_page_top.htm";
string basicUserName = "kaiin";
string basicPassword = "naisho";
UnityWebRequest unityWebRequest = UnityWebRequest.Get(url);
string authorization = $"Basic {Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes($"{basicUserName}:{basicPassword}"))}";
unityWebRequest.SetRequestHeader("AUTHORIZATION", authorization);
yield return unityWebRequest.SendWebRequest();

if (unityWebRequest.result == UnityWebRequest.Result.Success)
{
    Debug.Log(unityWebRequest.responseCode);
    Debug.Log(unityWebRequest.downloadHandler.text);
}
else
{
    Debug.Log(unityWebRequest.error);   
}

正しく動作していればresponseCode200になっており、認証されていない場合は401が返ってくるはずです。

動作している様子