255 lines
5.5 KiB
PHP
255 lines
5.5 KiB
PHP
<?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;
|
||
|
||
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>¼
|
||
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;
|
||
|