리플렉션을 통해이를 수행 할 수 있습니다. 불행하게도 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);
}
}
사용법 :
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