これを反映させることができます。残念ながら、UnityがMonoを使用しており、変数名が全く異なるため、GetField
がヘッダーを保持する変数を見つけることができないため、同様の質問からのC#の回答は一切ありません。
HttpWebRequest
クラスのすべてのヘッダーをHttpWebRequest.GetType().GetFields
でダンプし、ヘッダーを保持するフィールドの名前を探します。私のテストでは、フィールド名は"webHeaders"
であり、タイプはWebHeaderCollection
です。
以下は変更拡張法である反射から"webHeaders"
その:
public static class ExtensionMethods
{
public static void changeSysTemHeader(this HttpWebRequest request, string key, string value)
{
WebHeaderCollection wHeader = new WebHeaderCollection();
wHeader[key] = value;
FieldInfo fildInfo = request.GetType().GetField("webHeaders",
System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Instance
| System.Reflection.BindingFlags.GetField);
fildInfo.SetValue(request, wHeader);
}
public static void changeReflectionField(this HttpWebRequest request, string fieldName, object value)
{
FieldInfo fildInfo = request.GetType().GetField(fieldName, System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Instance
| System.Reflection.BindingFlags.GetField);
fildInfo.SetValue(request, value);
}
}
USAGE:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://1.1.1.1");
//Change Host header
request.changeSysTemHeader("Host", "xyz.net");
request.changeReflectionField("hostChanged", true);
WebResponse response = request.GetResponse();
これはUser-Agent
ような任意の制限されたヘッダのために働くべきです。 Unity 2017.2でテストされています。ユニティバージョンと、変数名が将来変更されたときに誰でも簡単に修正できるように、フィールド名をどのように見つけたのかを言及しました。
[HttpWebRequestのカスタム "ホスト"ヘッダーを設定する方法](https://stackoverflow.com/questions/1450937/how-to-set-custom-host-header-in-httpwebrequest) – joreldraw
@ joreldrawこれはUnityです。リフレクションを使用しているので動作しないものはありません – Programmer
[System.Net.WebRequestを使用しているときにHTTPヘッダーを設定できません](https://stackoverflow.com/questions/239725/cannot-set-some-http-headers-利用時システムネットネットリクエスト) – Foggzie