不知道为什么,我一用HTTP/1.1发送请求,GHS代理就慢得要死。即是改用HTTP/1.0发送请求,如果把服务器端的Header转发给用户,照样慢的要死。不知道是怎么回事,所以只好写出这个只具备一般浏览功能,连POST都不支持,更别说301转向之类的GHS代理的PHP版本。
采用fsockopen获取数据。
首先,把绑在GHS的域名绑到某PHP空间,并将实际DNS指向该PHP空间。该空间需要支持.htaccess和URL ReWrite。
然后,把下面内容保存为index.php,传到根目录:
<?php //header不完整,强制为HTTP 1.0 $ghslist= array( "72.14.203.121", "72.14.207.121", "74.125.43.121", "74.125.47.121", "74.125.53.121", "74.125.77.121", "74.125.93.121", "74.125.95.121", "74.125.113.121", "216.239.32.21", "216.239.34.21", "216.239.36.21", "216.239.38.21", ); $ghsnum=rand(0,count($ghslist)); //set_time_limit(600); //error_reporting(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; } //header($content); //echo $content; } //显示网页内容 while(!feof($fp)) { echo fgets($fp,128); } } /*//设置头部信息 function setHeaders() { $headers=getallheaders(); //传送访客IP信息 if (isset($_SERVER['REMOTE_ADDR'])) { $headers['X-Real-IP'] = $_SERVER['REMOTE_ADDR']; } if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $headers['X-Forwarded-For'] = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $headers['X-Forwarded-For'] = $_SERVER['REMOTE_ADDR']; } return $headers; }*/ //发送头部信息 function sendHeaders($fp) { //$requestHeader=$this->setHeaders(); $theREQUEST_METHOD=isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD']:'GET'; $http_host=$_SERVER['HTTP_HOST'];//$requestHeader['Host']="creke.net";//在这里更改http请求时远程主机 $theREQUEST='http://'.$http_host.$_SERVER['REQUEST_URI'];//isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI']:'/';//这里设置请求的URI $theSERVER_PROTOCOL='HTTP/1.0';//isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL']:'HTTP/1.1'; $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"); /*foreach($requestHeader as $name => $value) { fputs($fp,"$name: $value\n"); }*/ //发送post内容,这里有问题 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";//$ghslist[$ghsnum]; $http=new http; $fp=$http->http_fopen($thehost); if(!$fp) { echo"sorry,con't connect"; exit; } //得到返回的结果 $http->http_fget($fp); $http->http_fclose($fp); exit(); ?>
然后,在.htaccess添加如下的ReWrite规则:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /index.php [L]
这样就OK了。
以后每次访问到这个PHP空间的请求,都会通过fsockopen重新请求到ghs.google.com,这样就达到的GHS代理的目的。最后再提醒一次,本PHP版代理只支持网页浏览,对于POST、301转向等GHS应用暂不支持。
你鬼画符的给谁看啊?
临兵斗者皆阵列在前——诛邪!
对php不是太了解,刚刚废了老半天申请免费php空间,好像都不支持.htaccess,而且对.htaccess也不是很了解。
水平太差了,有成品没有。
做的成品。绑定到此IP就行了。没有nginx的好用,这个支持就浏览115599.ampsites.com
这个只有你自己的域名能用的,跟nginx的原理不同,呵呵。
请问影响收录吗?不会有影响吗?
这个跟收录不会相互影响
用000webhost的免费空间试用了一下,直接跳转到错误页面,我查询了一下,000webhost的免费空间是支持.htaccess和URL ReWrite的,不知道是什么原因
很可能是rewrite规则没写对。
在IE下浏览正常,在谷歌和浏览都不正常
在IE下浏览正常,用谷歌和火狐浏览都不正常
请检查是不是没有将PHP的error reporting关闭
creke老大,你的东西很管用啊,我弄了以后基本满意。但不知道我哪里出了点错,裸域时访问提示301页面重置了。有空你帮我看看吧,地址:http://jsyjs.co.cc
在下业余爱好者,如果回复内容很多的话,就发我邮箱吧
我这里只要是访问co.cc都会被重置的。你自己多测试一下。
邮箱地址:[email protected]
回复那么快啊,谢谢,有最新进展一定向您汇报
老大,我在头上做了个301跳转,解决了。既然系统只肯吃3w,我就喂3w了。另外,friefox和oprea测试发现,css丢失,谷歌的浏览器还没测。
呵呵,你要自己慢慢研究啦。这个代理只是实验性的东西,并不完善,每个人都可能遇到不同的问题。