Я пытаюсь найти наиболее подходящий способ сделать двухстороннее сокет-соединение через HTTP-прокси - скажем, это протокол типа telnet. К сожалению, мне также необходимо поддерживать аутентификацию NTLM (с прокси), а также Basic и Digest, в дополнение к любым другим будущим механизмам проверки подлинности, которые я не могу предсказать.Двухсторонняя связь через HTTP-прокси
Если бы это было просто базовое и дайджест, я бы сам обработал соединение, но я действительно не хочу застревать в болоте, который является NTLM. Глядя на базовый API AuthenticationManager, он очень привязан к HttpWebRequest, поэтому я не могу использовать эту функциональность, если я использую socket/tcpclient/whatever или даже пишущий новый вывод WebRequest.
Воспроизведение с помощью HttpWebResponse дает поток, который нельзя записать, используя RequestStream после получения потока ответов, дает параллельное исключение io.
Пробежав через все возможности, я могу думать, я пришел с каким-то неприятным кодом, который выходит из-за NetworkStream, связанный с HttpWebRequest, который позволяет два способа связи:
.....
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-интерфейсов, которые позволят мне использовать встроенную функциональность проверки подлинности прокси-сервера.