add proxy

This commit is contained in:
SilenceLeo 2014-09-03 20:46:32 +08:00
parent da5ee09039
commit 4750c24171
2 changed files with 255 additions and 1 deletions

View File

@ -124,11 +124,11 @@ input[type=radio]:checked:after{content:''; display:block; width:12px; height:12
.form_cardimg img{max-width:100%;}
.btn{ height:40px; padding:0 1em;-webkit-box-sizing: border-box; line-height:40px; background:#ffbb51; border:0; margin:0; display:inline-block; border-radius:3px; font-size:1.1875rem; color:#FFF; text-align:center; position:relative; overflow:hidden;}
.btn:active{background: #fa7a13;box-shadow: 0 1px 0px #fa6f13}
.btn_block{display:block; width:100%; }
.btn_lg{height:45px; line-height:45px;}
.btn_m{height:30px; line-height:30px; font-size:0.75rem;}
.btn_success{background:#fa8c13;}
.btn_success:active{background: #fa7a13;box-shadow: 0 1px 0px #fa6f13}
.btn_gray{background:#b5b5b5;}
.box{padding:10px 15px;}

254
Mobile12306New/proxy.php Normal file
View File

@ -0,0 +1,254 @@
<?php
//var_dump($_SERVER);
/*********all header*******************/
$headers = array();
foreach($_SERVER as $key=>$value)
{
if('HTTP_' == substr($key,0,5))
{
$headers[str_replace('_','-',substr($key,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'];
}
/**************************/
$method = isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD'] :"";
if($method == 'OPTIONS')
{
}
$url = isset($headers['FISHPROXY-RAWURL'])?$headers['FISHPROXY-RAWURL']:"";
if($url == '')
{
return;
}
$url = urldecode($url);
if($_SERVER['QUERY_STRING'])
{
$arr_query_string = explode("&",$_SERVER['QUERY_STRING']);
//array_shift($arr_query_string);
if(is_array($arr_query_string) && count($arr_query_string)>0)
{
$query_string = implode("&",$arr_query_string);
//echo $url."\n";
//var_dump(strpos($url,"?"))."\n";
if(strpos($url,"?") === false)
{
$url = $url."?".$query_string;
}
else
{
if(substr($url,-1) == "&")
{
$url = $url. $query_string;
}
else
{
$url = $url."&".$query_string;
}
}
}
}
$myheader = array();
$ch = curl_init($url);
if($method == 'POST')
{
$http_build_query = file_get_contents("php://input");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $http_build_query);
}
$url_parse = parse_url($url);
$cookietag = str_replace('.','',$url_parse['host'])."_";
foreach($headers as $header=>$v)
{
if(strpos($header,'FISHPROXY-')===0)
{
continue;
}
switch($header)
{
case "HOST":
#echo $url,$dynamicHost;
break;
case "CONNECTION":
break;
case "ACCEPT":
$myheaders['ACCEPT'] = 'Accept:'.$v;
break;
case 'ACCEPT-LANGUAGE':
$myheaders['ACCEPT-LANGUAGE'] = 'Accept-Language:'.$v;
break;
case "REFERER":
curl_setopt($ch, CURLOPT_REFERER,$v);
break;
case 'USER-AGENT':
curl_setopt($ch,CURLOPT_USERAGENT,$v);
break;
case 'CONTENT-TYPE':
$myheaders['CONTENT-TYPE'] = "Content-type:".$v;
break;
//case 'CONTENT-LENGTH':
// $myheaders['CONTENT-LENGTH'] = "Content-length:".$v;
// break;
case 'COOKIE':
$cookies = explode(";",$v);
$str_cookie = array();
if(is_array($cookies))
{
foreach($cookies as $cookie)
{
if(strpos(trim($cookie),$cookietag) ===0 && false===strpos($cookie,'TIETONG'))
{
$str_cookie[] = substr(trim($cookie),strlen($cookietag));
}
}
}
curl_setopt($ch,CURLOPT_COOKIE,implode("; ",$str_cookie));
break;
case 'ORIGIN':
$myheaders[$header] = "Origin:".$v;
break;
default:
// $myheaders[$header] = $header.":".$v;
break;
}
}
foreach($headers as $header=>$v)
{
if(!strpos($header,'FISHPROXY-')===0)
{
continue;
}
$header = substr($header,10);
switch($header)
{
case "HOST":
break;
case "CONNECTION":
break;
case "ACCEPT":
$myheader['ACCEPT'] = 'Accept:'.$v;
break;
case 'ACCEPT-LANGUAGE':
$myheaders['ACCEPT-LANGUAGE'] = 'Accept-Language:'.$v;
break;
case "REFERER":
curl_setopt($ch, CURLOPT_REFERER,$v);
break;
case 'USER-AGENT':
curl_setopt($ch,CURLOPT_USERAGENT,$v);
break;
case 'CONTENT-TYPE':
$myheaders['CONTENT-TYPE'] = "Content-type:".$v;
break;
case 'CONTENT-LENGTH':
$myheaders['CONTENT-LENGTH'] = "Content-length:".$v;
break;
case 'COOKIE':
curl_setopt($ch,CURLOPT_COOKIE,$v);
break;
//case 'ORIGIN':
// $myheaders['ORIGIN'] = "Origin:".$v;
//break;
default:
// $myheaders[$header] = $header.":".$v;
break;
}
}
curl_setopt($ch,CURLOPT_ENCODING ,'gzip,deflate');
curl_setopt($ch,CURLOPT_HTTPHEADER,$myheaders);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
$error = curl_error ($ch);
curl_close($ch);
$arr_temp = explode("\r\n\r\n",$response);
$redirect_count = $info['redirect_count'];
$header_length = 0;
for($i = 0; $i< $redirect_count+1; $i++)
{
$header = $arr_temp[$i];
$header_length += strlen($header);
$header_length +=4;
if(strpos($header,'HTTP/1.1 100 Continue')!==false)
{
$redirect_count ++;
}
}
$body = substr($response,$header_length);
if(isset($info['content_type']) && strpos(strtoupper($info['content_type']),'TEXT/HTML')!==false &&
(strpos(strtoupper($info['content_type']),'GB2312') !==false || strpos(strtoupper($info['content_type']),'GBK')!==false))
{
$body = @iconv('gbk','utf-8',$body);
}
if(preg_match_all('/Set-Cookie:[\s]+([^=]+)=([^;]+)/i', $header,$match))
{
if(is_array($match) && count($match) == 3)
{
foreach($match[1] as $k=>$v)
{
setcookie($cookietag.$v,$match[2][$k],time()+86400,'/12306');
}
}
}
echo $body;
//Ìí¼ÓÈÕÖ¾¼Ç¼
if($url == 'http://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand')
{
if(strpos($header,'image/jpeg') <=0)
{
error_log(date("Y-m-d H:i:s"). " code can't show\n",3,'../logs/log_'.date("Ymd").".log");
}
else
{
//error_log('code can show',3,'../logs/log_'.date("Ymd").".log");
}
}
//var_dump($error);
exit;