• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何使用PHP服务端代理抓取网页内容_PHP

php 搞代码 4年前 (2022-01-25) 24次浏览 已收录 0个评论

最近公司暂时断开外网,只开放公司自己所有的站点允许访问,说实在的,做WEB开发的断网,真是让人哭笑不得……

由于需要查找资料,只好简单写了一个PHP的服务端代理页面来用一下!

简单框架页面:

以下为引用的内容:

<style type=”text/css”>
*{margin:0;padding:0;}
html,body{overflow:hidden;}
td{padding:0;vertical-align:top;}
</style>

<iframe name=”actioncontent” style=”width:100%;height:100%;”></iframe>

<script type=”text/javascript”>
window.onload = function(){
document.getElementById(‘targeturl’).focus();
};
</script>

PHP代理页面:

以下为引用的内容:

<?php
//使用Snoopy的抓页功能
include “Snoopy.class.php”;
//目标URL
$url = $_REQUEST[‘targeturl’];
//将所有传递过来的参数列出来
$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);
//替换目标内容中脚本里有可能替换父窗口地址的代码
$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(){
var easyUTF8 = function(gbk){if(!gbk){return ”;}var utf8 = [];for(var i=0;i<gbk.length;i++){var s_str = gbk.charAt(i);if(!(/^%u/i.test(escape(s_str)))){utf8.push(s_str);continue;}var s_char = gbk.charCodeAt(i);var b_char = s_char.toString(2).split('');var c_char = (b_char.length==15)?[0].concat(b_char):b_char;var a_b =[];a_b[0] = '1110'+c_char.splice(0,4).join('');a_b[1] = '10'+c_char.splice(0,6).join('');a_b[2] = '10'+c_char.splice(0,6).join('');for(var n=0;nvar getArgs = function(surl){var sarg = surl.split('?'),rv={};rv.filename=sarg[0];if(!sarg[1]){return rv;}var aarg=sarg[1].split('&'),atmp=[];for(var i=0;ivar createIPH = function(name,value){if(!name){return;}if(/msie/i.test(navigator.appVersion)){return document.createElement('’);}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 = sref.match(/^http:\/\/[^\/]*/i)[0];
//页面加载后执行下面的过程
var process = function(){
//抓取页面中所有链接
var dlink = document.getElementsByTagName(‘a’),la = dlink.length;
//抓取页面中所有表单
var dform = document.getElementsByTagName(‘form’),lf = dform.length;
//遍历所有链接,替换它们的href地址
for(var 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(easyUTF8(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&#8217;;
//重设表单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(easyUTF8(pv));
}
}
};
}
};
来&源gao@dai!ma.com搞$代^码%网搞gaodaima代码//绑定该过程到window.onload
if(document.attachEvent){window.attachEvent(‘onload’,process);}else{window.addEventListener(‘load’,process,false);}
})();
</script>
//脚本放在输出内容前,避免内容中可能出现脚本错误而导致我们要做的事情被废掉
//输出抓到的目标页面内容
<?php echo ($ec==”gbk”)?$opt:$org;?>

在这个小作品中,我编写了一个重要的JavaScript函数easyUTF8,它可以很方便地在JavaScript脚本中将GBK编码的内容转换为UTF-8编码。

我们还处理了一下表单中添加项目的兼容问题,注意看createIPH函数,在IE中创建的表单项内容,在指定name和value时可能会出现我们不希望的结果,这在DHTML手册中已经有过描述了。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何使用PHP服务端代理抓取网页内容_PHP

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址