Part1:代码实例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <?php 2 set_time_limit(60); 3 if( !defined('__DIR__') ) 4 { 5 define('__DIR__',dirname(__FILE__)) ; 6 } 7 8 $_REQUEST['url'] =gtRootUrl(); 9 //改成网站正式服务器ip 10 $ip= '127.0.0.1'; 11 $aAccess = curl_init() ; 12 // -------------------- 13 // set URL and other appropriate options 14 curl_setopt($aAccess, CURLOPT_URL, $_REQUEST['url']); 15 curl_setopt($aAccess, CURLOPT_HEADER, true); 16 curl_setopt($aAccess, CURLOPT_RETURNTRANSFER, true); 17 curl_setopt($aAccess, CURLOPT_FOLLOWLOCATION, false); 18 curl_setopt($aAccess, CURLOPT_SSL_VERIFYPEER, false); 19 curl_setopt($aAccess, CURLOPT_SSL_VERIFYHOST, false); 20 curl_setopt($aAccess, CURLOPT_TIMEOUT, 60); 21 curl_setopt($aAccess, CURLOPT_BINARYTRANSFER, true); 22 //curl_setopt($aAccess, CURLOPT_HTTPPROXYTUNNEL, 0); 23 curl_setopt($aAccess,CURLOPT_PROXY,$ip.':80'); 24 //curl_setopt($aAccess,CURLOPT_PROXY,'127.0.0.1:8888'); 25 26 if(!empty($_SERVER['HTTP_REFERER'])) 27 curl_setopt($aAccess,CURLOPT_REFERER,$_SERVER['HTTP_REFERER']) ; 28 29 30 31 $headers=get_client_header(); 32 curl_setopt($aAccess,CURLOPT_HTTPHEADER,$headers) ; 33 34 if( $_SERVER['REQUEST_METHOD']=='POST' ) 35 { 36 curl_setopt($aAccess, CURLOPT_POST, 1); 37 curl_setopt($aAccess, CURLOPT_POSTFIELDS, http_build_query($_POST)); 38 } 39 40 41 // grab URL and pass it to the browser 42 43 $sResponse = curl_exec($aAccess); 44 list($headerstr,$sResponse)=parseHeader($sResponse); 45 $headarr= explode(" ", $headerstr); 46 foreach($headarr as $h){ 47 if(strlen($h)>0){ 48 if(strpos($h,'Content-Length')!==false) continue; 49 if(strpos($h,'Transfer-Encoding')!==false) continue; 50 if(strpos($h,'Connection')!==false) continue; 51 if(strpos($h,'HTTP/1.1 100 Continue')!==false) continue; 52 header($h); 53 } 54 } 55 56 function replace_html_path($arrMatche) 57 { 58 $sPath = makeUrl($arrMatche[4]) ; 59 if( strtolower($arrMatche[1])=='img' ) 60 { 61 $sPath.= '&bin=1' ; 62 } 63 64 return "<{$arrMatche[1]} {$arrMatche[2]} {$arrMatche[3]}="{$sPath}"" ; 65 } 66 67 function get_client_header(){ 68 $headers=array(); 69 foreach($_SERVER as $k=>$v){ 70 if(strpos($k,'HTTP_')===0){ 71 $k=strtolower(preg_replace('/^HTTP/', '', $k)); 72 $k=preg_replace_callback('/_w/','header_callback',$k); 73 $k=preg_replace('/^_/','',$k); 74 $k=str_replace('_','-',$k); 75 if($k=='Host') continue; 76 $headers[]="$k:$v"; 77 } 78 } 79 return $headers; 80 } 81 82 function header_callback($str){ 83 return strtoupper($str[0]); 84 } 85 86 function parseHeader($sResponse){ 87 list($headerstr,$sResponse)=explode(" ",$sResponse, 2); 88 $ret=array($headerstr,$sResponse); 89 if(preg_match('/^HTTP/1.1 d{3}/', $sResponse)){ 90 $ret=parseHeader($sResponse); 91 } 92 return $ret; 93 } 94 95 function gtRootUrl() 96 { 97 //缓存结果,同一个request不重复计算 98 static $gtrooturl; 99 if(empty($gtrooturl)){ 100 // Protocol 101 $s = !isset($_SERVER['HTTPS']) ? '' : ($_SERVER['HTTPS'] == 'on') ? 's' : ''; 102 $protocol = strtolower($_SERVER['SERVER_PROTOCOL']); 103 $protocol = substr($protocol,0,strpos($protocol,'/')).$s.'://'; 104 // Port 105 $port = ($_SERVER['SERVER_PORT'] == 80) ? '' : ':'.$_SERVER['SERVER_PORT']; 106 // Server name 107 $server_name = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'].$port : getenv('SERVER_NAME').$port; 108 // Host 109 $host = isset($_SERVER['HTTP_HOST']) ? strtolower($_SERVER['HTTP_HOST']) : $server_name; 110 111 $gtrooturl=$protocol.$host.$_SERVER['REQUEST_URI']; 112 } 113 return $gtrooturl; 114 } 115 116 // close cURL resource, and free up system resources 117 curl_close($aAccess); 118 echo $sResponse ;
思想参考原网址