2009-04-03 5 views
4

J'ai l'intention d'écrire un simple proxy HTTP en Perl en utilisant le module HTTP::Proxy. Je suis clair avec la tâche très élémentaire de la façon de créer un proxy et des filtres de base et d'autres choses. Mais ce que je ne comprends pas, c'est comment forcer manuellement un fichier à travers le cache.Comment puis-je écrire un proxy HTTP de cache en Perl?

Fondamentalement, le scénario est celui que j'exécute ce proxy dans l'ordinateur A. L'utilisateur sur l'ordinateur B accède à Internet utilise ce proxy. Maintenant, ce proxy agira comme un passage pour toutes les demandes de B, jusqu'à ce qu'il demande une URL particulière (un fichier, disons http://abc.com/file.zip). J'ai besoin d'intercepter cette demande, et au lieu de lui permettre de télécharger le fichier. Zip réel, lui donner un fichier déjà téléchargé que j'ai gardé manuellement sur l'ordinateur A.

En outre, notez que je ne pourrais pas avoir un serveur web en cours d'exécution sur l'ordinateur A, donc je ne peux pas simplement rediriger l'URL, j'ai besoin de le servir à partir du cache.

Des pointeurs pour cela seraient appréciés. Merci

Éditer: Quelques informations supplémentaires. J'ai commencé à utiliser HTTP :: Daemon et LWP :: UserAgent en combinaison à la place de HTTP :: Proxy Jusqu'à présent, j'intercepte toutes les requêtes avec succès, puis je recherche les en-têtes pour l'URL. Si le nom de fichier particulier n'est pas là, je passe simplement la requête à la destination réelle en utilisant LWP: UserAgent (simple_request) et renvoie la réponse à l'expéditeur original en utilisant send_response. Si je trouve le nom de fichier, je ne redirige pas la requête, mais j'essaye de servir mon fichier particulier en utilisant la méthode "send_file_response". Le problème est que toutes les autres requêtes fonctionnent bien et que la maquette B est capable de surfer sur le net, mais quand elle essaie de télécharger ce fichier, elle attend toujours une réponse. A propos de l'utilisation de calmars, Ce n'est pas une option pour moi d'installer calmar sur ces machines.

Répondre

1

Je pense à partir de la distance, nous pouvons seulement deviner que pendant que la send_file_response ne fonctionne pas. Je recommande

  • lire et à comprendre

  • la documentation pour les modules et les méthodes que vous utilisez

  • journal l'action en quelque sorte dans le serveur proxy (début, fin) trace la communication entre le client B et le serveur proxy.

+0

Informations supplémentaires ci-dessus. –

+0

Thnx Ingo..Le problème est que la documentation pour ce module, en particulier cette méthode est assez clairsemée. J'essaie d'enregistrer les choses et de vérifier de cette façon. Va poster avec plus d'infos ici bientôt. –

+0

Vous pouvez également regarder la source Perl si la documentation manque. – Ingo

3

Ne serait-il pas préférable d'utiliser Squid pour quelque chose comme ça?

+0

Oui, il serait plus facile d'utiliser squid, mais je ne peux pas parce que je ne suis pas autorisé à installer quoi que ce soit sur les machines en question. –

Questions connexes