IT技术博客大学习 共学习 共进步

使用 Perl 实现 HTTP 代理

扶凯 2011-06-10 14:06:39 浏览 4,005 次

一台开发的服务器,没有连接外网的权限,但内一网段内有一台机器可以连接外网,不想做路由和搞个 SQUID ,所以直接使用 Perl 来做了一个小的 Web 代理,最简单的实现这个功能。

这样在内部的那台开发服务器,也能使用 cpanm 来安装模块了。

我在想下面这个代理服务器,是不是世界上代码最少的代理服务器。有空可以加强一下,支持存取在本地的文件,支持 cookie,

use strict;
use warnings;
use Plack::Builder;
use Plack::Response;
use Plack::Request;
use LWP::UserAgent;
use Data::Dumper;
 
 
my $ua = LWP::UserAgent->new;
 
my $app = builder {
    sub {
        my $url = shift;
        my $req    = Plack::Request->new($url);
        my $ua_res = $ua->get($req->request_uri);
        my $res    = Plack::Response->new($ua_res->code);
        $res->headers($ua_res->headers);
        $res->body($ua_res->content);
        return $res->finalize;
    };
};

使用也非常简单,启动代理

$ plackup -p 80 proxy.pl

cpanm 是使用的 wget 下载,所以我们修改一下 wget 的代理地址
编辑.wgetrc 这个文件加入如下

http_proxy = http://x.x.x.x:80
ftp_proxy = http://x.x.x.x:80
use_proxy = on
wait = 5

建议继续学习

  1. 让安卓手机通过代理翻墙的方法 (阅读 8,803)
  2. 代理的加密部分 (阅读 8,247)
  3. 关于 SOCKS 代理的远端 DNS 解析 (阅读 7,745)
  4. HTTP 正向代理与反向代理 (阅读 4,981)
  5. 关于不得不在python中使用代理访问网络的方法 (阅读 4,942)
  6. nginx.conf控制指定的代理ip和ip访问的设置手记 (阅读 4,627)
  7. 关于http代理 (阅读 4,524)
  8. socks5代理服务器的配置 (阅读 3,862)
  9. 代理的本地部分 (阅读 3,784)
  10. 代理的远程部分 (阅读 3,163)