IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁網(wǎng)絡(luò)編程PHP編程 → 如何使用PHP服務(wù)端代理抓取網(wǎng)頁內(nèi)容

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

時(shí)間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)

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

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

簡(jiǎn)單框架頁面:

以下為引用的內(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";
    //目標(biāo)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));
     }
    }
    //判斷目標(biāo)URL是否帶有?(即是否帶有參數(shù))
    $cc = strpos($url,"?") ? "&" : "?";
    //重組URL
    $geturl = !$par ? $url : $url.$cc.implode("&",$par);
    //抓取重組后的URL頁面內(nèi)容
    $snoopy = new Snoopy;
    $snoopy->fetch($geturl);
    //替換目標(biāo)內(nèi)容中腳本里有可能替換父窗口地址的代碼
    $org = str_replace("top.location","top.title",$snoopy->results);
    //嘗試轉(zhuǎn)換目標(biāo)內(nèi)容編碼到UTF-8
    $opt = iconv("gbk","utf-8",$org);
    //判斷目標(biāo)內(nèi)容編碼為GBK或UTF-8
    $ec = strlen($opt)?"gbk":"utf-8";

    ?>
    <script type="text/javascript">
    //封閉運(yùn)行,避免與后面內(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;}};
    //回顯目標(biāo)URL到父窗口文本框
    var dtu = top.document.getElementById('targeturl');
    if(dtu){dtu.value = '<?php echo $geturl;?>';}
    //目標(biāo)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)建一個(gè)隱藏域targeturl,值為上面處理的src地址
     var dfi = createIPH('targeturl',src);
     dform[i].appendChild(dfi);
     //創(chuàng)建一個(gè)隱藏域ie,值為utf-8,純屬為搜索引擎使用
     var dfi2 = createIPH('ie','utf-8');
     dform[i].appendChild(dfi2);
     //重設(shè)表單提交目標(biāo)窗口
     dform[i].target = 'actioncontent';
     //重設(shè)表單action地址
     dform[i].action = 'https://www.w3cgroup.com/geturl/action_get.php

    關(guān)鍵詞標(biāo)簽:PHP服務(wù)端,抓取網(wǎng)頁內(nèi)

    相關(guān)閱讀

    文章評(píng)論
    發(fā)表評(píng)論

    熱門文章 plsql developer怎么連接數(shù)據(jù)庫-plsql deveplsql developer怎么連接數(shù)據(jù)庫-plsql deve2021年最好用的10款php開發(fā)工具推薦2021年最好用的10款php開發(fā)工具推薦在 PHP 中使用命令行工具在 PHP 中使用命令行工具php應(yīng)用程序安全防范技術(shù)研究php應(yīng)用程序安全防范技術(shù)研究

    相關(guān)下載

    人氣排行 詳解ucenter原理及第三方應(yīng)用程序整合思路、方法PHP中防止SQL注入攻擊PHP會(huì)話Session的具體使用方法解析PHP運(yùn)行出現(xiàn)Notice : Use of undefined constant 的解決辦法CakePHP程序員必須知道的21條技巧PHP如何清空mySQL數(shù)據(jù)庫PHP采集圖片實(shí)例(PHP采集)plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法

  • <tfoot id="mkmgu"></tfoot><option id="mkmgu"></option><fieldset id="mkmgu"></fieldset>
  • <optgroup id="mkmgu"><nav id="mkmgu"></nav></optgroup>