LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 670|回复: 1

[ZT]PHP来做Proxy

[复制链接]
发表于 2004-11-24 08:53:45 | 显示全部楼层 |阅读模式
如果你有一个国外的虚拟主机,想必它都会提供PHP吧。如果有一个站点在国内不能访问,但是在国外你的虚拟主机却能够访问,那是不是你能够通过那台虚拟主机做Proxy来让你从国内访问呢?
但是那没有SSH的权限,所以你没有办法通过通讯层直接做Proxy,(如果有SSh当然你可以直接用SecureCRT里的PortMapping功能,那要简单多了)。所以你现在有的资源就是http或者ftp。所以用服务器端的一个脚本来获得另一个网址的内容就是唯一的出路了。还好现在不用再用那些可怜并且难懂的Perl了,因为PHP对于HTTP和RegularExpression的支持已经非常完善了。所以我这里就做了一个试验,代码如下,很简单的说。

[php]
$url = $_GET["url"];
echo (URLopen($url));

function URLopen($url)
{
// Fake the browser type

        ini_set('user_agent','MSIE 4.0b2;');
        $parsedUrl = parse_url($url);
        $fp = fopen("$url",'r');
        $result = "";

        while (!feof($fp))
        {
                $result .= fread($fp, 500);
        }

        if(preg_match('/jpg|gif|jpeg$/i',$url)==0){
                echo ($parsedUrl["host"]);
                $result = preg_replace('/(href|src)="(?!http://'.$parsedUrl["host"].'/)(.+)"/i','\1="getpage.php?url=http://'.$parsedUrl["host"].'/\2"',$result);
                $pattern = '/(href|src)="(http://)/i'
                $replace = '\1="getpage.php?url=http://'
                $result = preg_replace($pattern,$replace,$result);
        }
        return $result;
}
[/php]

得到一个URL上的内容,然后如果是HTML(不是图片)就替换里面的路径,如果原来写的是相对路径,则先替换成绝对路径。达到的效果是一个页面里面的所有链接都变成了从这个脚本的一个参数。就如同Hotmail里处理外部link一样。

国外的虚拟主机2G是7.95美元(一年付费),也就是每年800人民币不到就能够做一个几乎是通行无阻的Proxy了。大家试试这个PHP脚本能用否,也希望有大侠修改修改后为人民服务一下。
转自xchina.linux.net.cn
作者:未授权
发表于 2004-11-24 13:49:51 | 显示全部楼层
有个cgiproxy也能实现这个功能,呵呵.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表