国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

怎樣使用PHP服務(wù)端代理抓取網(wǎng)頁內(nèi)容

2024-05-04 21:52:33
字體:
供稿:網(wǎng)友

最近公司暫時斷開外網(wǎng),只開放公司自己所有的站點允許訪問,說實在的,做WEB開發(fā)的斷網(wǎng),真是讓人哭笑不得......

由于需要查找資料,只好簡單寫了一個PHP的服務(wù)端代理頁面來用一下!

簡單框架頁面:

以下為引用的內(nèi)容:

<style type="text/css">
*{margin:0;padding:0;}
html,body{overflow:hidden;}
td{padding:0;vertical-align:top;}
</style>
<table width="100%" height="100%" cellspacing="0" cellpadding="0" border="0">
<tr>
<td style="height:25px;background:#d4d0c8;padding:5px 10px;">
<form method="post" action="action_get.php" target="actioncontent" style="margin:0;padding:0;">
<input type="text" id="targeturl" name="targeturl" style="width:100%;border:1px inset;margin:0;" />
</form>
</td>
</tr>
<tr>
<td>
<iframe name="actioncontent" style="width:100%;height:100%;"></iframe>
</td>
</tr>
</table>
<script type="text/javascript">
window.onload = function(){
 document.getElementById('targeturl').focus();
};
</script>

PHP代理頁面:

以下為引用的內(nèi)容:

<?php
//使用Snoopy的抓頁功能
include "Snoopy.class.php";
//目標URL
$url = $_REQUEST['targeturl'];
//將所有傳遞過來的參數(shù)列出來
$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是否帶有?(即是否帶有參數(shù))
$cc = strpos($url,"?") ? "&" : "?";
//重組URL
$geturl = !$par ? $url : $url.$cc.implode("&",$par);
//抓取重組后的URL頁面內(nèi)容
$snoopy = new Snoopy;
$snoopy->fetch($geturl);
//替換目標內(nèi)容中腳本里有可能替換父窗口地址的代碼
$org = str_replace("top.location","top.title",$snoopy->results);
//嘗試轉(zhuǎn)換目標內(nèi)容編碼到UTF-8
$opt = iconv("gbk","utf-8",$org);
//判斷目標內(nèi)容編碼為GBK或UTF-8
$ec = strlen($opt)?"gbk":"utf-8";

?>
<script type="text/javascript">
//封閉運行,避免與后面內(nèi)容中腳本混亂
(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;n<a_b.length;n++){utf8.push('%'+parseInt(a_b[n],2).toString(16).toUpperCase());}}return utf8.join('');};
var 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;i<aarg.length;i++){atmp=aarg[i].split('=');rv[atmp[0]]=atmp[1];}return rv;};
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 = sref.match(/^http:////[^//]*/i)[0];
//頁面加載后執(zhí)行下面的過程
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編碼參數(shù)值
 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;
 //重設(shè)鏈接地址
 dlink[i].+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);}
 //創(chuàng)建一個隱藏域targeturl,值為上面處理的src地址
 var dfi = createIPH('targeturl',src);
 dform[i].appendChild(dfi);
 //創(chuàng)建一個隱藏域ie,值為utf-8,純屬為搜索引擎使用
 var dfi2 = createIPH('ie','utf-8');
 dform[i].appendChild(dfi2);
 //重設(shè)表單提交目標窗口
 dform[i].target = 'actioncontent';
 //重設(shè)表單action地址
 dform[i].action = 'http://www.w3cgroup.com/geturl/action_get.php';
 //重設(shè)表單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));
   }
  }
 };
 }
};
//綁定該過程到window.onload
if(document.attachEvent){window.attachEvent('onload',process);}else{window.addEventListener('load',process,false);}
})();
</script>
//腳本放在輸出內(nèi)容前,避免內(nèi)容中可能出現(xiàn)腳本錯誤而導致我們要做的事情被廢掉
//輸出抓到的目標頁面內(nèi)容
<?php echo ($ec=="gbk")?$opt:$org;?>

在這個小作品中,我編寫了一個重要的JavaScript函數(shù)easyUTF8,它可以很方便地在JavaScript腳本中將GBK編碼的內(nèi)容轉(zhuǎn)換為UTF-8編碼。

我們還處理了一下表單中添加項目的兼容問題,注意看createIPH函數(shù),在IE中創(chuàng)建的表單項內(nèi)容,在指定name和value時可能會出現(xiàn)我們不希望的結(jié)果,這在DHTML手冊中已經(jīng)有過描述了。

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 辰溪县| 盈江县| 滦平县| 明溪县| 天全县| 正蓝旗| 庆阳市| 克什克腾旗| 留坝县| 惠安县| 政和县| 河津市| 岳西县| 泗阳县| 怀来县| 济阳县| 永宁县| 亚东县| 遵义县| 尚志市| 山西省| 通江县| 西贡区| 邛崃市| 博湖县| 秦皇岛市| 获嘉县| 湄潭县| 来凤县| 济源市| 聊城市| 内乡县| 建平县| 大名县| 宁南县| 大安市| 腾冲县| 广汉市| 晋江市| 阜新市| 双辽市|