2017-06-15 11 views
0

にカスタムヘッダーを追加します。C#のコードは、私が走っている:Unity3Dは - ここでWWWForm

WWWForm formData = new WWWForm(); 

//Adding 
formData.headers.Add ("Authorization", "Basic " + System.Convert.ToBase64String(Encoding.UTF8.GetBytes(CONSUMER_KEY + ":" + CONSUMER_SECRET))); 
formData.headers.Add ("Host", "api.twitter.com"); 

//Assigning 
formData.headers ["Host"] = "api.twitter.com"; 
formData.headers ["Authorization"] = "Basic " + System.Convert.ToBase64String (Encoding.UTF8.GetBytes (CONSUMER_KEY + ":" + CONSUMER_SECRET)); 

Debug.Log (formData.headers ["Authorization"]); 

を上に示したように、私はヘッダにAuthorizationHostフィールドを追加しようとしましたが、その後、ちょうどそれらに値を割り当てます念のため。しかしUnity3Dは毎回formData.headers ["Authorization"]にエラーを投げます。ここで

エラーメッセージです:

KeyNotFoundException: The given key was not present in the dictionary. 
System.Collections.Generic.Dictionary`2[System.String,System.String].get_Item (System.String key) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:150) 
Information+Twitter.GetToken() (at Assets/Static Libraries/Information.cs:143) 
Information.Initialize() (at Assets/Static Libraries/Information.cs:18) 
WorldScript.Awake() (at Assets/WorldScript.cs:16) 

答えて

3

WWWForm.headers変数は読み取り専用です。 Add関数を呼び出すと、実際には何も追加されません。そのため、データがWWWForm.headersに追加されないため、そのエラーが発生しています。

ユニティのWWWクラスが最近変更されました。ヘッダーを追加するには、Dictionaryを作成してDictionaryWWWコンストラクターの3番目のパラメーターに渡す必要があります。

public WWW(string url, byte[] postData, Dictionary<string, string> headers); 

このような何か:

Dictionary<string, string> headers = new Dictionary<string, string>(); 
headers.Add("User-Agent", "Mozilla/5.0(Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"); 

WWW www = new WWW("http://www.thismachine.info/", null, headers); 
yield return www; 
Debug.Log(www.text); 

あなたが投稿するフォームを持っている場合は、あなたがそれを行うためにWWWFormDictionaryの組み合わせを使用することができます。 WWWFormWWWForm.dataで配列に変換し、WWWコンストラクタの2番目のパラメータに渡してください。

Dictionary<string, string> headers = new Dictionary<string, string>(); 
headers.Add("User-Agent", "Mozilla/5.0(Windows NT 10.0; WOW64) AppleWebKit/537.36(KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"); 

WWWForm formData = new WWWForm(); 
formData.AddField("UserName", "Programmer"); 
formData.AddField("Password", "ProgrammerPass"); 

WWW www = new WWW("http://www.thismachine.info/", formData.data, headers); 
yield return www; 
Debug.Log(www.text); 
+0

読み取り専用オブジェクトを変更してもエラーまたは警告が表示されないのは奇妙です。 –

+0

私はそれが有線であることを知っています。 'WWWForm.headers'にアクセスするたびに、' Dictionary'の新しいインスタンス/コピーが与えられます。あるいは、Unityは 'Dictionary'から何かを削除するコードを持っています。私はソースコードを持っていない限り、正確に何が起こっているのかわかりません。 – Programmer