2010年6月4日星期五

寻找 ghs.google.com 的可用 IP?

这么久了,头一次想到用 PHP 作数据转发,实现 Google 服务域名绑定在中国大陆的可用性。上来一搜,没想到已经有高手写出了这样的代码:梦溪博客的博主给出了一个他编写的 PHP 版本 GHS 转发原型,具备一般的网页浏览功能;暂不支持 HTTP 转发和 POST 等附加功能。但想必这已足够了。

详细的 PHP 代码请查看来自梦溪博客的文章。

使用方法非常简单,只需要一个可访问到 ghs.google.com 的支持 PHP、开启 rewrite 和 fopen 功能的任意服务器。(几乎各种免费 PHP 空间、GoDaddy 赠送的 Linux 空间等都可以支持)
随后,只需把你在 Google 服务中绑定的域名指向你的这个服务器 IP,把梦溪博客上提供的代码保存为 index.php,并如文章所述,编辑一个 .htaccess 文档,同置于根目录下即可。
如此一来,访问这个主机将实现从 Google 获取转发数据,实现网页浏览。此转发页面支持 Blogger、appspot 等服务的域名绑定。
为梦溪博客鼓掌吧。

最后,附上完整代码。
index.php 文件:

<?php
//header不完整,强制为HTTP 1.0
//取得所有http header
if (!function_exists('getallheaders'))
{
    function getallheaders()
    {
       foreach ($_SERVER as $name => $value)
       {
           if (substr($name, 0, 5) == 'HTTP_')
           {
               $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
           }
       }
if (isset($_SERVER['PHP_AUTH_DIGEST'])) {
   $headers['AUTHORIZATION'] = $_SERVER['PHP_AUTH_DIGEST'];
} elseif (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
   $headers['AUTHORIZATION'] = base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $_SERVER['PHP_AUTH_PW']);
}
if (isset($_SERVER['CONTENT_LENGTH'])) {
$headers['CONTENT-LENGTH'] = $_SERVER['CONTENT_LENGTH'];
}
if (isset($_SERVER['CONTENT_TYPE'])) {
$headers['CONTENT-TYPE'] = $_SERVER['CONTENT_TYPE'];
}
return $headers;
    }
}

class http{

    function http_fopen($conn_host,$conn_port = "80"){
        $fp = fsockopen($conn_host,$conn_port);
        if(!$fp){
return false;
        }
        return $fp;
    }
    //得到查询内容
    function http_fget($fp){
     //向服务器发送header
     $fp = $this->sendHeaders($fp);
     //向客户端发送header
while(!feof($fp))
{
$content = fgets($fp);
if(trim($content) == "")
{
break;
}
}
//显示网页内容
while(!feof($fp))
{
echo fgets($fp,128);
}
    }
//发送头部信息
function sendHeaders($fp)
{
$theREQUEST_METHOD = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD']:'GET';
$http_host = $_SERVER['HTTP_HOST'];
$theREQUEST = 'http://'.$http_host.$_SERVER['REQUEST_URI'];
$theSERVER_PROTOCOL = 'HTTP/1.0';
$firstHeader = $theREQUEST_METHOD." ".$theREQUEST." ".$theSERVER_PROTOCOL."\n";
fputs($fp,$firstHeader);
fputs($fp,"Host: $http_host\n");
fputs($fp,"User-agent: ".$_SERVER['HTTP_USER_AGENT']."\n");
if(strtolower($theREQUEST_METHOD)=='post')
{
$line = file_get_contents("php://input");
fputs($fp,$line);
}
fputs($fp,"\n");
return $fp;
}
function http_fclose($fp)
{
fclose($fp);
}
  }

$thehost = "ghs.google.com";
$http = new http;
$fp = $http->http_fopen($thehost);
if(!$fp)
{
  echo "Could not connect!";
  exit;
}
//得到返回的结果
$http->http_fget($fp);
$http->http_fclose($fp);
exit();
?>


.htaccess 文件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /index.php [L]

13 条评论:

  1. 你现在的绑定方法就是这样的吗?

    回复删除
  2. 可惜我的godaddy里的免费空间就是有广告。。你也是如此吧!

    回复删除
  3. @植树: 是这样的,用的是Godaddy的免费主机。
    @1mojim: Blogger页面只是用于普通浏览,这样来说这个PHP脚本已经够用了,有广告的话应该不会有太大影响。

    回复删除
  4. 想做一个Blogger.com中文用户列表,有没有兴趣参加,希望通过这个方式能让更多的Blogger相互了解
    http://blog.kban.info/p/blogger.html

    回复删除
  5. @OceanBan:谢谢你的邀请!希望能互相交流!

    回复删除
  6. @马晨:你的这个方法可以再详细点,我还是有点不是太懂,把那个index.php放入根目录,修改.htaccess 文件,地址指向服务器 IP就完了?
    介意把你的index.php和.htaccess 文件发给我么,还有什么配置也发给我我研究下,以作备用,[email protected]

    回复删除
  7. @Roy: 没有办法,免费服务嘛 -_-

    回复删除
  8. 现在就动工....get one..

    回复删除
  9. 广告太大了
    非常影响美观
    www.hexilou.com

    回复删除
  10. 我用的ghs代理服务挂掉了。

    回复删除
  11. 用我的吧,只提供几个用户,http://www.jmj.hk

    回复删除
  12. 感谢。现成品。http://115599.ampsites.com只支持浏览。不支持post,html

    回复删除

请勿张贴商业广告。评论可能需要审核。
No advertisement. Comment review enabled.