首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可编程透明转发代理

可编程透明转发代理
EN

Stack Overflow用户
提问于 2009-12-19 23:37:28
回答 4查看 3.9K关注 0票数 9

我正在寻找一种方法来编写一个透明的转发代理,例如用户在代理设置中指向他们的浏览器的代理。

我发现前向代理在可脚本性和健壮性之间存在明显的折衷。例如,它们是在RubyPython中开发的无数代理,允许您检查每个请求响应,并随意记录、修改、过滤……然而,它们要么无法代理所需的所有内容,要么在使用20分钟后崩溃。

另一方面,我怀疑Squid和Apache是相当健壮和稳定的,然而对于我来说,我不能决定如何通过脚本来开发动态行为。最终,我希望设置配额,并动态过滤该配额。我有点想把mod_proxy和mod_perl混在一起??可以允许有趣的动态代理,但很难知道从哪里开始,甚至知道它是否可能。

请给我建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-20 00:34:08

Squid和Apache都有为每个请求调用允许/拒绝决策的外部脚本的机制。这允许您使用它们的代理引擎,但调用每个请求的外部脚本来处理任意复杂性。您的代码只需要管理业务逻辑,而不是繁重的工作。

在Apache中,我从未以这种方式使用过mod_proxy,但我使用过mod_rewrite。mod_rewrite还允许您代理请求。RequestMap指令允许您将决策传递给外部脚本:

MapType: prg,MapSource:有效常规文件的Unix文件系统路径

这里的源是一个程序,而不是一个地图文件。要创建它,您可以使用您选择的语言,但结果必须是一个可执行程序(可以是对象代码,也可以是第一行带有魔术cookie技巧'#!/path/ To /interpreter‘的脚本)。

此程序在Apache服务器启动时启动一次,然后通过其stdin和stdout文件句柄与重写引擎通信。对于每个map函数查找,它将接收要在stdin上作为换行符终止的字符串进行查找的键。然后,如果失败(即,给定的键没有相应的值),它必须将查找到的值作为stdout上以换行符结尾的字符串返回,或者返回四字符串NULL'‘。

使用Squid,您可以通过external_acl_type指令获得类似的功能:

此标记定义使用帮助器程序的外部acl类应如何查找状态。

祝你好运!

票数 3
EN

Stack Overflow用户

发布于 2009-12-19 23:53:12

如果您正在寻找Perl解决方案,那么可以看看HTTP::Proxy

不过,我不确定是否有任何mod_perl解决方案。CPAN带来的是Apache::Proxy,谷歌带来的是MyProxy。但是请注意,这两个工具都有点旧,所以YMMV,但您可能会发现它们是一个有用的辅助工具。

票数 2
EN

Stack Overflow用户

发布于 2009-12-20 00:26:22

我一直在使用python开发一个HTTP库,编写时特别考虑了代理服务器的用例。在这一点上它还不是很成熟(当然需要更多的测试和单元测试),但它已经足够完整了,我觉得它很有用。我不知道它是否能满足你的任何需求。

这个库叫做httpmessage,google代码站点是here。下面是一个在examples page上编写代理服务器的示例。

我很高兴收到反馈和/或错误修复。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1933217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档