$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;