Serveur proxy HTTP Java
J'ai besoin d'implémenter une application de serveur proxy HTTP qui proxy les demandes de plusieurs clients vers un serveur distant.
Voici les étapes:
- Demande de transfert du client au proxy
- Demande de transfert de proxy au serveur
- Le serveur renvoie la demande au proxy
- Proxy renvoie la demande au Client.
Je ne sais tout simplement pas comment je devrais implémenter ce proxy. Ma première pensée a été d'implémenter une application tomcat qui utilise jersey / apache httpclient pour transférer la demande au serveur distant et renvoyer la réponse au client ?
Existe-t-il un meilleur moyen d'implémenter un tel serveur proxy ?
Le proxy devrait gérer plusieurs threads.
2 answers
Vous ne pouvez pas l'implémenter en tant que servlet, et il n'y a aucune raison d'utiliser une forme de client HTTP.
Un serveur proxy sans fonctionnalités est une chose très simple:
- Accepter une connexion et démarrer un thread pour ça.
- Lisez la demande du client jusqu'à la ligne vide.
- Extrayez la commande GET ou CONNECT ou quelle qu'elle soit et connectez-vous à l'hôte nommé.
- Si cela échoue, renvoyez une réponse d'erreur HTTP appropriée, fermez le socket et oubliez il.
-
Sinon, démarrez deux threads pour copier des octets, un dans chaque direction. Rien de fantaisie, juste
while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); }
- Lorsque l'une de ces sockets lit un EOS, arrêtez l'autre socket pour la sortie et quittez le thread qui a obtenu l'EOS.
- Si le socket qui était la source de l'EOS est déjà arrêté pour la sortie, fermez-les tous les deux.
Ou utilisez Apache SQUID.
Check outLittleProxy it il a des classes intégrées pour les requêtes entrantes et sortantes; vous pouvez simplement écrire votre code de la même manière que vous traiteriez une requête HTTP dans un servlet.