本帖最后由 huniu999 于 2010-07-28 20:27:34 编辑

解决方案 »

  1.   

    你去下一个 phpproxy 类就都有了
      

  2.   

    回复2楼你说的这个和Snoopy.class.php
    有什么差别吗?  我目前正在研究这个
    我不要代理浏览的功能  我只想把他们给抓过来显示倘若能框架显示 更好
    http://topic.csdn.net/u/20100728/11/674a5b27-65a3-43d1-ad91-bbb50953335a.html这才是我真正需要的功能我觉得抓过来显示的速度好慢
      

  3.   

    目前测试到 打开任何网站都显示这个//脚本放在输出内容前,避免内容中可能出现脚本错误而导致我们要做的事情被废掉 //输出抓到的目标页面内容 不知道哪里出问题了<?php
    //使用Snoopy的抓页功能
    include "Snoopy.class.php";
    //目标URL
    $url = $_REQUEST['targeturl'];
    //下载类文件列表
    $download = array(
        'pdf'=>'application/pdf',
        'rar'=>'application/octet-stream',
        'chm'=>'application/octet-stream',
        'ppt'=>'application/vnd.ms-powerpoint',
        'doc'=>'application/msword',
        'xls'=>'application/vnd.ms-excel',
        'exe'=>'application/octet-stream',
        'gif'=>'image/gif',
        'jpg'=>'image/jpeg',
        'jpeg'=>'image/jpeg',
        'png'=>'image/png'
    );
    //取文件扩展名
    function getextend($file_name){
     $extend = pathinfo($file_name);
     $extend = strtolower($extend["extension"]);
     return $extend;
    }
    //将所有传递过来的参数列出来
    $par = array();
    $GetPost = array_merge($_POST,$_GET);
    foreach($GetPost As $Key=>$Value){
     if($Key!='targeturl'){
      $Value = str_replace("%25","%",$Value);
      array_push($par,($Key . "=" . $Value));
     }
    }
    //判断目标URL是否带有?(即是否带有参数)
    $cc = strpos($url,"?") ? "&" : "?";
    //重组URL
    $geturl = !$par ? $url : $url.$cc.implode("&",$par);
    //抓取重组后的URL页面内容
    $snoopy = new Snoopy;
    $snoopy->fetch($geturl);
    //检测当前文件是否为下载类型
    $sftype = getextend($url);
    $bdown = @$download[$sftype];
    //如果是,则下载该文件
    if($bdown){
     $query = $snoopy->results;
     header("Content-type: ".$bdown);
     header("Content-Disposition:inline;filename=".$url);
     header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
     header('Expires:0');
     header('Pragma:public');
     echo $query;
     exit;
    }
    //替换目标内容中脚本里有可能替换父窗口地址的代码
    $org = str_replace("top.location","top.title",$snoopy->results);
    //尝试转换目标内容编码到UTF-8
    $opt = iconv("gbk","utf-8",$org);
    //判断目标内容编码为GBK或UTF-8
    $ec = strlen($opt)?"gbk":"utf-8";?>
    <script type="text/javascript">
    //封闭运行,避免与后面内容中脚本混乱
    (function(){
    /*如果是js,css,txt类型文件,则直接输出,不做处理*/
    var sftype = '<?php echo $sftype;?>';
    if(/(?:js|css|txt)/i.test(sftype)){return;}
    var createIPH = function(name,value){if(!name){return;}if(/msie/i.test(navigator.appVersion)){return document.createElement('<input type="hidden" name="'+name+'" value="'+value+'"/>');}else{var dfi = document.createElement('input');dfi.type = 'hidden';dfi.name = name;dfi.value = value;return dfi;}};
    //回显目标URL到父窗口文本框
    var dtu = top.document.getElementById('targeturl');
    if(dtu){dtu.value = '<?php echo $geturl;?>';}
    //目标URL及domain
    var sref = '<?php echo $url;?>';
    var sdomain = (/^(http:\/\/[^\/]*)/i.test(sref))?RegExp.$1:'';
    //插入外部样式
    var newStyleSheet = function(shref){
        var ds = document.createElement('link');
        ds.rel = 'styleSheet';
        ds.type='text/css';
        ds.href = shref;
        document.getElementsByTagName('head')[0].appendChild(ds);
    };
    //页面加载后执行下面的过程
    var process = function(){
    //抓取页面中外部样式链接
    var dstyle = document.getElementsByTagName('link'),ls = dstyle.length;
    //抓取页面中所有链接
    var dlink = document.getElementsByTagName('a'),la = dlink.length;
    //抓取页面中所有表单
    var dform = document.getElementsByTagName('form'),lf = dform.length;
    //抓取页面中所有图片
    var dimg = document.getElementsByTagName('img'),lm = dimg.length;
    //遍历所有外部样式链接,重新插入替换后的样式文件
    for(var i=0;i<ls;i++){
            var shref = dstyle[i].href;
            if(!shref){continue;}
            shref = shref.toString().replace(/^http:\/\/www\.w3cgroup\.com(?:\/geturl)?/i,sdomain);
            var newhref = (/^http/i.test(shref))?'http://www.w3cgroup.com/geturl/action_get.php?targeturl='+shref:'http://www.w3cgroup.com/geturl/action_get.php?targeturl='+sdomain+'/'+shref.replace(/^\/*/,'');
            newStyleSheet(newhref);
    }
     //遍历所有链接,替换它们的href地址
     for(i=0;i<la;i++){
     var src = dlink[i].href.toString().replace(/^http:\/\/www\.w3cgroup\.com(?:\/geturl)?/i,sdomain);
     var oargs = getArgs(src),ahref = [];
     //UTF-8编码参数值
     for(var d in oargs){
      if(!d||d=='filename'||!oargs[d]){continue;}
      ahref.push(d+'='+encodeURIComponent(encodeURI(oargs[d])));
     }
     var ghref = ahref.length?oargs.filename+'?'+ahref.join('&'):oargs.filename;
     //重设链接地址
     dlink[i].href = 'http://www.w3cgroup.com/geturl/action_get.php?targeturl='+ghref;
     }
     //遍历所有表单,替换它们的action地址
     for(i=0;i<lf;i++){
     //抓取表单action并处理
     var src = dform[i].action.toString().replace(/^http:\/\/www\.w3cgroup\.com(?:\/geturl)?/i,sdomain);
     if(!(/^http/.test(src))){src = (/^\/.*$/.test(src))?(sdomain+src):(sdomain+'/'+src);}
     //创建一个隐藏域targeturl,值为上面处理的src地址
     var dfi = createIPH('targeturl',src);
     dform[i].appendChild(dfi);
     //创建一个隐藏域ie,值为utf-8,纯属为搜索引擎使用
     var dfi2 = createIPH('ie','utf-8');
     dform[i].appendChild(dfi2);
     //重设表单提交目标窗口
     dform[i].target = 'actioncontent';
     //重设表单action地址
     dform[i].action = 'http://www.w3cgroup.com/geturl/action_get.php';
     //重设表单onsubmit事件,用来UTF8编码字段值
     dform[i].onsubmit = function(){
      var dlms = this.elements,l = dlms.length-1,pn = '',pt = '',pv = '';
      for(var i=0;i<l;i++){
       pn = dlms[i].name,pt = dlms[i].type,pv = dlms[i].value;
       if(!pn||pn=='targeturl'||pn=='ie'){continue;}
       if(pt=='submit'||pt=='reset'||pt=='button'){
        dlms[i].value = encodeURIComponent(pv);
       }else{
        dlms[i].value = encodeURIComponent(encodeURI(pv));
       }
      }
     };
     }
    //遍历所有图片,重新载入
    for(i=0;i<lm;i++){
            var src = dimg[i].src;
            if(!src){continue;}
            src = src.toString().replace(/^http:\/\/www\.w3cgroup\.com(?:\/geturl)?/i,sdomain);
            var newsrc = (/^http/i.test(src))?'http://www.w3cgroup.com/geturl/action_get.php?targeturl='+src:'http://www.w3cgroup.com/geturl/action_get.php?targeturl='+sdomain+'/'+src.replace(/^\/*/,'');
            dimg[i].src = newsrc;
    }
    };
    //绑定该过程到window.onload
    if(document.attachEvent){window.attachEvent('onload',process);}else{window.addEventListener('load',process,false);}
    })();
    </script>
    //脚本放在输出内容前,避免内容中可能出现脚本错误而导致我们要做的事情被废掉
    //输出抓到的目标页面内容
    <?php echo $scontent;?>