我試圖想出最合適的方式來通過HTTP代理進行雙向套接字連接 - 可以說這是一種telnet樣式的協議。不幸的是,我還需要支持NTLM身份驗證(使用代理)以及基本和摘要,以及我無法預測的任何其他未來身份驗證機制。通過HTTP代理進行雙向通信
如果它只是基本的和消化的,我會自己處理連接,但我真的不想陷入NTLM的泥潭中。查看底層的AuthenticationManager API,它看起來與HttpWebRequest非常相關,所以如果我使用套接字/ tcpclient /無論甚至是編寫新的WebRequest派生,我都無法利用該功能。
使用HttpWebResponse進行播放會產生無法寫入的流,在檢索到響應流後使用RequestStream會產生併發io異常。
不必通過各種我能想到的,我想出了一些討厭的代碼,失控了的HttpWebRequest其相關的NetworkStream準備運行允許雙向通信:
.....
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream str = resp.GetResponseStream();
System.Type type = str.GetType();
PropertyInfo info = type.GetProperty("Connection", BindingFlags.NonPublic|BindingFlags.Instance| BindingFlags.Public);
object obj = info.GetValue(str, null);
type = obj.GetType();
info = type.GetProperty("NetworkStream", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
object obj2 = info.GetValue(obj, null);
NetworkStream networkStream = obj2 as NetworkStream;
我敢(它不會與Mono一起工作),所以我想知道是否有更好的方式使用公共API,這將允許我利用代理身份驗證的內置運行時功能。