J'essaie de trouver le moyen le plus approprié pour établir une connexion bidirectionnelle via un proxy HTTP - disons qu'il s'agit d'un protocole de type telnet. Malheureusement, je dois également prendre en charge l'authentification NTLM (avec le proxy) ainsi que Basic et Digest, en plus de tous les autres mécanismes d'authentification futurs que je ne peux pas prévoir.Communication bidirectionnelle via un proxy HTTP
Si c'était juste basique et que je digérerais, je gérerais la connexion moi-même, mais je ne veux vraiment pas rester coincé dans la fange qu'est NTLM. En regardant l'API AuthenticationManager sous-jacente, il semble très lié à HttpWebRequest, donc je ne peux pas tirer parti de cette fonctionnalité si j'utilise un socket/tcpclient/whatever ou même écrire une nouvelle dérivation WebRequest.
Jouer avec HttpWebResponse génère un flux qui ne peut pas être écrit, en utilisant le RequestStream après que le flux de réponse a été récupéré donne une exception io simultanée.
Après avoir couru à travers toutes les possibilités que je peux penser, je suis venu avec un code méchant qui sort NetworkStream associé à un HttpWebRequest qui permet une communication bidirectionnelle:
.....
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;
Ce que je suis assez repoussé par (cela ne marchera pas avec Mono pour commencer), je me demande s'il y a une meilleure façon d'utiliser les API publiques, ce qui me permettra de tirer parti de la fonctionnalité d'exécution intégrée de l'authentification proxy.