蓝派网(www.lan27.com)-精选网络资源,分享和交流! 文章首页站内搜索在线手册广告代码酷站欣赏万年历
您现在的位置: 蓝派网 >> 文章中心 >> 网络编程 >> PHP >> 正文

模拟Google ToolBar直接提交PageRank请求

作者:佚名    文章来源:网络    更新时间:2008-7-7 17:41:33
算法来源于 Internet,Greg Shaw稍作修改,直接打开Socket,模拟ToolBar的行为,直接向www.google.com 提交查询


原理介绍:

很多站长对他们的站点在 Google Dance期间的Rank的改变很有兴趣。
除此之外,很多人也想知道他们的新的PaneRank。一般而言,Google 工具栏
从www.google.com的实际DNS记录的IP所指定的数据中心取得PageRank值。
所以,当Google Dance开始时,工具栏通常会显示旧的PageRank值。

Google以一个简单的文本文件的形式提交PageRank给工具栏。在早些时候,是通过XML来
传递的。大概是在2002年8月份的时候换成文本形式的。PageRank文件能够直接通过向Google提交请求
获取PR:

http://www.google.com/search?
client=navclient-auto&
ch=0123456789&
features=Rank&
q=info:http://www.domain.com/

在PageRank文件中,只有一行文字,最后的那部分就是PageRank值.

为了在浏览器显示PageRank文件,上面的URL中的每个组成参数都是必须的:
1.  "navclient-auto"是参数"client"的值,用来识别工具栏的。
2.  通过参数"q"来提交URL。
3.  参数"features"的值是"Rank",表示请求一个PageRank文件。如果忽略这个参数,Googles的
    服务器还是返回旧的XML格式的文件。
4. 参数"ch"传输一个你想提交的URL的校验和给Google。

当Google的工具栏的版本更新时,校验和可能被改变。

Google工具栏请求一个PageRank文件后可以被IE缓存。所以他们的URL和校验和能够简单地在
Internet临时文件夹里面查看到。知道了你的URL,你就可以通过浏览器查看你的PageRank。因为
PageRank文件是被浏览器缓存的且以明文显示,一旦请求之后不会清除。所以在浏览器里面
查看PageRank文件应该没有违反Google的条款。然而,你应该要谨慎,因为工具栏是以他们自己的用户代理
提交给Google的:
         Mozilla/4.0 (compatible; GoogleToolbar 1.1.60-deleon; OS SE 4.10)
1.1.60-deleon 是工具栏的版本,当然它可能会改变。OS是你安装的操作系统。所以,
如果没有通过一个代理服务器并且浏览器ID 没有被修改的话,Google能够识别浏览器的请求。

现在,让我们来看看我们如何能够取得新的PageRank值。看看IE的换存,你将注意到PageRank文件
不是从www.google.com而是从IP地址 像216.239.33.102取得的。另外,PageRank文件的URL通常
含有一个"failedip"的参数,它的值被设置为像"216.239.35.102;1111"(它的功能还不是很清楚)
(upsdn注释:就是失效的服务器的IP地址,一般就是上次请求失败的服务器,或者没有更新索引的服务器)
然而,得到新的PageRank很简单。修改URL中的IP地址,新的请求就发给一个有了新的索引的数据
中心。

下面介绍用PHP模拟Toobar的行为直接获取PageRank值:


===================
<?php
//error_reporting(E_ALL);

define('GOOGLE_MAGIC', 0xE6359A60);

//unsigned shift right
function zeroFill($a, $b)
{
  $z = hexdec(80000000);
  if ($z & $a)
  {
    $a = ($a>>1);
    $a &= (~$z);
    $a |= 0x40000000;
    $a = ($a>>($b-1));
  }
  else
  {
    $a = ($a>>$b);
  }
  return $a;
}


function mix($a,$b,$c)
{
  $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
  $b -= $c; $b -= $a; $b ^= ($a<<8);
  $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
  $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
  $b -= $c; $b -= $a; $b ^= ($a<<16);
  $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
  $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));  
  $b -= $c; $b -= $a; $b ^= ($a<<10);
  $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
  
  return array($a,$b,$c);
}

function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC)
{
    if(is_null($length))
    {
        $length = sizeof($url);
    }
    $a = $b = 0x9E3779B9;
    $c = $init;
    $k = 0;
    $len = $length;
    while($len >= 12)
    {
        $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
        $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
        $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
        $mix = mix($a,$b,$c);
        $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
        $k += 12;
        $len -= 12;
    }

    $c += $length;
    switch($len)              /* all the case statements fall through */
    {
        case 11: $c+=($ur

[1] [2] 下一页


发表评论】【打印此文】【关闭窗口】【点击数:
★好玩的休闲小游戏★