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:

  1. Demande de transfert du client au proxy
  2. Demande de transfert de proxy au serveur
  3. Le serveur renvoie la demande au proxy
  4. 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.

Author: Matt Ball, 2013-05-09

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:

  1. Accepter une connexion et démarrer un thread pour ça.
  2. Lisez la demande du client jusqu'à la ligne vide.
  3. Extrayez la commande GET ou CONNECT ou quelle qu'elle soit et connectez-vous à l'hôte nommé.
  4. Si cela échoue, renvoyez une réponse d'erreur HTTP appropriée, fermez le socket et oubliez il.
  5. 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);
    }
    
  6. 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.
  7. 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.

 10
Author: user207421, 2016-01-25 11:16:13

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.

 8
Author: Ilya Yevlampiev, 2016-04-13 06:07:00