php 语言 典范 求解 多谢了 本帖最后由 huniu999 于 2010-07-28 20:27:34 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你去下一个 phpproxy 类就都有了 回复2楼你说的这个和Snoopy.class.php有什么差别吗? 我目前正在研究这个我不要代理浏览的功能 我只想把他们给抓过来显示倘若能框架显示 更好http://topic.csdn.net/u/20100728/11/674a5b27-65a3-43d1-ad91-bbb50953335a.html这才是我真正需要的功能我觉得抓过来显示的速度好慢 目前测试到 打开任何网站都显示这个//脚本放在输出内容前,避免内容中可能出现脚本错误而导致我们要做的事情被废掉 //输出抓到的目标页面内容 不知道哪里出问题了<?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及domainvar 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.onloadif(document.attachEvent){window.attachEvent('onload',process);}else{window.addEventListener('load',process,false);}})();</script>//脚本放在输出内容前,避免内容中可能出现脚本错误而导致我们要做的事情被废掉//输出抓到的目标页面内容<?php echo $scontent;?> 怎么用curl或者file_get_contents 采集重定向之前的页面内容呢? PHP domdocument保存的xml的问题。 为什么break不能跳出外层循环 高分求教,js控制安装控件问题 这条语句有错误吗?为什么没有返回值呢。 再次iframe问题。。高分求指点 有关PHP数组的问题 大家帮帮忙,我很想做个人网站, 求个程序。 急!!!!php连mysql数据库老是连不上。求助! checkdate() 的用法?参数格式是什么??在线等候....... php gettext实现多国语的问题!!!!!!!!!! window.open()问题
有什么差别吗? 我目前正在研究这个
我不要代理浏览的功能 我只想把他们给抓过来显示倘若能框架显示 更好
http://topic.csdn.net/u/20100728/11/674a5b27-65a3-43d1-ad91-bbb50953335a.html这才是我真正需要的功能我觉得抓过来显示的速度好慢
//使用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;?>