【发布时间】:2009-04-03 22:00:15
【问题描述】:
我打算使用HTTP::Proxy 模块在Perl 中编写一个简单的HTTP 代理。 我很清楚如何创建代理和基本过滤器等基本任务。但我无法理解的是如何通过缓存手动强制提供文件。
基本上,场景是我在计算机 A 上运行此代理。计算机 B 上的用户访问 Web 时使用此代理。现在,这个代理将充当所有 B 请求的传递,直到他请求一个特定的 URL(一个文件,比如http://abc.com/file.zip)。我需要拦截这个请求,而不是让他下载实际的 file.zip,而是给他一个我手动保存在计算机 A 上的已经下载的文件。
另外,请注意我可能没有在计算机 A 上运行 Web 服务器,所以我不能只重定向 url,我需要从缓存中提供它。
对此的任何指针将不胜感激。 谢谢
编辑:更多信息。我开始结合使用 HTTP::Daemon 和 LWP::UserAgent 而不是 HTTP::Proxy 到目前为止,我成功拦截了所有请求,然后在标头中搜索 url。如果特定文件名不存在,我只需使用 LWP:UserAgent (simple_request) 将请求传递到实际目的地,然后使用 send_response 将响应返回给原始发件人。如果我找到文件名,我不会进一步转发请求,而是尝试使用“send_file_response”方法提供我的特定文件。问题是所有其他请求都工作正常,comp B 能够上网,但是当它试图下载这个文件时,它只是一直在等待响应。 关于使用 squid,我不能在这些机器上安装 squid。
【问题讨论】: