samedi 24 octobre 2009

Comment faire un proxy HTTP

Comme vous l’avez vu, j’ai récemment mis à jour mon projet codeplex zeroconf. Ce projet ne contient pas seulement l’implémentation du protocol DNS et du protocol Bonjour. Il contient aussi l’implémentation du protocol HTTP qui me permet d’envoyer des requêtes HTTP en UDP, chose qui n’est pas faisable avec l’implémentation du framework .NET. Au boulot, j’ai besoin de vérifier qu’une application que j’ai développé fonctionne correctement avec IE6( oui, ca existe encore… malheureusement). Puisque je suis sur Windows 7, je me suis dit que ca pourrait être super d’utiliser IE6 en application virtuelle. Je pense que vous voyer où je veux en venir. Sur une machine virtuel, on n’a pas accès au serveur de développement web démarré par visual studio. Ce que j’aurais pu faire, c’est déployer sur la machine virtuelle, ce qui veut dire, installer IIS, le configurer, passer du temps à vérifier le fichier web.config… Bref, pas une solution des plus simple à mettre en place. Alors, je me suis dit : Ce qu’il me faut, c’est un proxy, et j’ai déjà l’implémentation du protocole HTTP !

Voici le code du fameux proxy :

public class Proxy
{
RestServer proxy;
string hostToRedirectTo;

static void Main(string[] args)
{
Proxy p = new Proxy(ushort.Parse(args[0]), args[1]);
p.Start();
Console.ReadLine();
p.Stop();
}

private void Stop()
{
proxy.Stop();
}

private void Start()
{
proxy.StartTcp();
}

public Proxy(ushort portToListenOn, string hostToRedirectTo)
{
proxy = new RestServer(portToListenOn);
this.hostToRedirectTo = hostToRedirectTo;
proxy.HttpRequestReceived += proxy_HttpRequestReceived;
}

void proxy_HttpRequestReceived(object sender, HttpRequestEventArgs e)
{
e.Request.Host = this.hostToRedirectTo;
e.Response = e.Request.GetResponse(true);
e.Response.Body.Position = 0;
}
}


Comme vous pouvez le voir, la solution est très simple, et ne nécessite qu’une dizaine de lignes de code !!!

vendredi 23 octobre 2009

Bonjour mis à jour

Bonjour à tous,

J’ai mis à jour mon projet codeplex zeroconf. Le principal but de cette release est du refactoring. Ce project n’est pas seulement une implémentation de bonjour, mais contient aussi une implémentation de serveur. Avec cette implémentation de serveur, vous pouvez faire presque tout ce que vous voulez. Le seul désavantage, c’est que je ne gère pas les sessions. Pour comprendre de quoi je parle, je vous conseille de télécharger la dernière release de bonjour et de jeter un oeil à l’assembly Network.dll. Je vous promets que je fournirai un peu plus de documentation à ce sujet.

Vous pouvez déjà regarder la documentation sur le site du projet.

Amusez-vous bien !