我试图想出最合适的方式来通过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,这将允许我利用代理身份验证的内置运行时功能。