Skip to content

Category archive for: Programmation

Etablir une connexion Socket via un proxy HTTP

Voici un cas concret de programmation réseau.

Si vous souhaitez connecter une Socket Java à un site distant via un proxy HTTP, avec par exemple le code suivant :

Proxy httpProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy", 8080));
Socket socket = new Socket(httpProxy);
socket.connect(new InetSocketAddress("192.168.0.2", 21));

Vous obtiendrez une exception IllegalArgumentException – « Invalid Proxy »

En effet, la classe Socket ne sait pas se connecter via un proxy HTTP.

Heureusement, il y a une solution !

Procédure de connexion via un proxy HTTP

Le procotole HTTP/1.1 permet de créer un tunnel via le proxy HTTP en utilisant la commande CONNECT.

L’idée est de se connecter sur le proxy et de lui envoyer les instructions :
CONNECT host:port HTTP/1.1
Host: host:port

Et le proxy vous fournit un tunnel vers l’hôte demandé à travers la socket que vous avez ouverte.

Concrètement, le code java donnerait quelque chose comme :

Socket socket = new Socket("proxy", 8080);
Writer proxyWriter = new PrintWriter(socket.getOutputStream(),true);
proxyWriter.write("CONNECT " + host + ":" + port + " HTTP/1.1\n")
proxyWriter.write("Host: " + host + ":" + port + "\n")
proxyWriter.write("\n")
proxyWriter.flush()

Et voilà, vous êtes connecté !! Vous pouvez utiliser votre socket ouverte pour vos échange avec le site distant.

Simple !

Note :
Si votre proxy demande une authentification, ajoutez la ligne suivante après le « Host: » :
Proxy-Authorization: chaine_de_connexion

où chaine_de_connexion est une chaîne d’authentification HTTP standard.

Des puzzles de programmation Java aux Google Tech Talks

Si vous ne connaissez pas l’excellent livre Java Puzzlers – Traps, Pitfalls, and Corner Cases, voici une vidéo de ses auteurs présentant quelques pièges de la programmation Java.

La présentation prend la forme d’un QCM où un programme vous est présenté et vous devez déterminer le résultat de son exécution.

Et je peux vous dire que les résultats sont parfois très très surprenants.

Un must pour les codeurs Java !

Présentation vidéo des technologies Google

Voici les vidéos d’une session du Ch’ti JUG consacrée aux technologies Google.

Didier Girard y a donné des démonstrations live et sans filet d’AppEngine, GWT, Android ou encore Wave.

1ère partie : Appengine

2ème partie : GWT et Android

3ème partie : Google Wave

Ayant dû partir avant la fin de ces présentations, je suis ravi de pouvoir les visualiser en ligne !

L’ensemble des vidéos du chtijug est disponible en suivant le lien suivant.

[ Les sessions chtijug en vidéo ]

javascript : oubliez alert(), faîtes de beaux logs avec blackbird

Voici un outil intéressant pour tous ceux qui se sont déjà retrouvés confrontés à du « débuggage » javascript : blackbird.

Blackbird est un outil qui affiche une (jolie) fenêtre de logs dans votre page, et vous pouvez ainsi ajouter des traces à votre programme facilement, par exemple :

log.debug('Ceci est un message de debug');
log.error('Là, c'est plutôt une erreur !');

C’est quand même beaucoup plus simple et élégant que de mettre des alerts partout ! :-)

blackbirdConsole

En plus, gros avantage, vous pouvez faire du profiling d’application avec des logs du type :

log.profile('bloc de profiling');
[...]
log.profile('bloc de profiling');

Qui affichera la durée en ms entre les deux appels.

Pour ajouter blackbird à une page, c’est très simple, ajoutez les fichiers javascript et css dans le header de votre page web.

[ Blackbird ]