【问题标题】:How can I write a caching HTTP proxy in Perl?如何在 Perl 中编写缓存 HTTP 代理?
【发布时间】: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。

【问题讨论】:

    标签: perl http caching proxy


    【解决方案1】:

    这样的事情直接使用Squid不是更好吗?

    【讨论】:

    • 是的,使用 squid 会更容易,但我不能,因为我不允许在有问题的机器上安装任何东西。
    【解决方案2】:

    我认为从远处看,我们只能猜测 send_file_response 何时不起作用。 我会推荐

    • 阅读并理解您正在使用的模块和方法的文档

    • 以某种方式在代理服务器中记录操作(开始、结束)

    • 跟踪客户端 B 和代理服务器之间的通信。

    【讨论】:

    • Thnx Ingo..问题是这个模块的文档,特别是这个方法非常稀疏。我正在尝试记录并以这种方式检查。很快就会在这里发布更多信息。
    • 如果缺少文档,您可能还想查看 perl 源代码。
    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多