get 과 post 요청 시 뮬 레이 션 (사용자 정의 header 와 테스트 CDN 노드 지원)

24838 단어 PHPgetpostCDN레저
다음은 get 이나 post 요청 을 모 의 하 는 방법 입 니 다.
1. get, post 방법
2. 사용자 정의 매개 변수
3. 사용자 정의 헤더
4. 서버 의 반환 내용 과 header 를 되 돌려 줍 니 다.
5. 특정 서버 요청 url 지원, cdn 노드 테스트 에 적합
코드 는 다음 과 같다.
 

  
  
  
  
  1. <?php  
  2. error_reporting(0);  
  3. $user_agent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10)";  
  4.  
  5. list($rheaders,$conntent)=request_url("60.28.14.148","80","get","http://mat1.gtimg.com/www/iskin960/qqcomlogo.png",array("User-Agent"=> $user_agent),array());  
  6.  
  7. //list($rheaders,$conntent)=request_url("","","get","http://www.baidu.com/s",array("User-Agent"=>$user_agent),array("wd"=>"test"));  
  8. if($rheaders["httpstatus"]>=200&&$rheaders["httpstatus"]<=300)  
  9. {  
  10.  
  11.   // , header  
  12.   if($rheaders['Content-Type']!="")  
  13.     header('Content-Type: '.$rheaders['Content-Type']);  
  14.     echo     $conntent;  
  15. //    foreach($rheaders as $k => $v)echo "$k: $v<br/>";  
  16. }else 
  17. {  
  18.     // 302,301 ,  
  19.     if($rheaders["httpstatus"]>=300&&$rheaders["httpstatus"]<=400){  
  20.             list($rheaders,$conntent)=request_url("","","get",$rheaders["Location"],array("User-Agent"=> $user_agent),array());          
  21.             if($rheaders["httpstatus"]>=200&&$rheaders["httpstatus"]<=300)  
  22.             {  
  23.              // , header  
  24.              if($rheaders['Content-Type'])  
  25.                     header('Content-Type: '.$rheaders['Content-Type']);  
  26.                 echo     $conntent;  
  27.             }  
  28.     }  
  29.     //    foreach($rheaders as $k => $v)echo "$k: $v<br/>";  
  30. }  
  31.  
  32.  
  33.  
  34. /*  
  35.  *  get,post url ,  
  36.  *  : $ip:url ip , ,ip $aURL host(ip )  
  37.          $port:int,url , ,ip $aURL , 80  
  38.          $method:get post, post  
  39.          $aURL: url, http://username:password@hostname:port/path?arg=value#anchor  
  40.          $headers: , http (Referer,Content-Disposition,Expires,Cookie,Pragma,User-Agent,Accept-Language )  
  41.                        $headers=array("Referer"=>"http://123.com","User-Agent"=>"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10)");  
  42.          $aParamsArray: , post get  
  43.                        $aParamsArray=array("id"=>123,"name"=>"abc");  
  44.  *  : : http (http ( 0, -1)),  
  45.            
  46. */ 
  47. function request_url($ip,$port,$method,$aURL,$headers,$aParamsArray)  
  48. {  
  49.     $rheaders=array();  
  50.      $rheaders["httpstatus"]=0;  
  51.     // URL host, ,  
  52.     $URL=parse_url($aURL);  
  53.     if(!$port)  
  54.     {  
  55.         // 80  
  56.         $port=($URL["port"]? $URL["port"]:80);      
  57.     }  
  58.     if(strcasecmp($method,"get")==0){  
  59.         $method="GET";  
  60.     }else{  
  61.         $method="POST";  
  62.     }  
  63.     // post  
  64.     foreach($aParamsArray as $key=> $value)  
  65.     {  
  66.      if($flag!=0)  
  67.      {  
  68.      $params.="&";  
  69.      $flag=1;  
  70.      }  
  71.      $params.=$key."=";  
  72.      $params.=urlencode($value);  
  73.      $flag=1;  
  74.     }  
  75.         if($method=="POST")  
  76.         {  
  77.      // , Content-Length  
  78.      $length=strlen($params);  
  79.  
  80.          }else 
  81.          {  
  82.           $length=0;  
  83.           // url  
  84.           $URL["query"]=$URL["query"]."&".$params;  
  85.          }  
  86.          if($URL["query"]){  
  87.              //  
  88.              $URL["path"].="?".$URL["query"].($URL["fragment"]?"#".$URL["fragment"]:"");  
  89.          }  
  90.      // socket  
  91.      $fp=fsockopen($ip==""$URL["host"]:$ip,$port,$errno,$errstr,10);  
  92.      if(!$fp)  
  93.      {  
  94.           $rheaders["httpstatus"]=-1;  
  95.              return array($rheaders,$errstr."--->".$errno);  
  96.      }  
  97.      //  
  98.      unset($headers['Host']);  
  99.      unset($headers['Content-Length']);  
  100.      unset($headers['Content-Type']);  
  101.      // post  
  102.      $header="$method ".$URL["path"]." HTTP/1.1\r
    "
    ;  
  103.      $header.="Host:".$URL["host"]."\r
    "
    ;  
  104.      foreach($headers as $k=> $v){  
  105.          $header.="$k:$v\r
    "
    ;  
  106.      }  
  107.      if(!$header["Content-Type"]){  
  108.      $header.="Content-Type:application/x-www-form-urlencoded\r
    "
    ;  
  109.           }  
  110.      $header.="Content-Length:".$length."\r
    "
    ;  
  111.      $header.="Connection:Close\r
    \r
    "
    ;  
  112.      if($method=="POST")  
  113.          {  
  114.          // post  
  115.          $header.=$params."\r
    "
    ;  
  116.      }  
  117. //     echo $header;  
  118.      // post  
  119.      fputs($fp,$header);  
  120.      $inheader=1;  
  121.      $lineno=0;  
  122.      $conntent="";  
  123.  
  124.      while(!feof($fp))  
  125.      {  
  126.           if($inheader){  
  127.          $line=fgets($fp,1024);// header  
  128.          }else{  
  129.              if($rheaders["Content-Length"]>=0){  
  130.                  $line=fread($fp,$rheaders["Content-Length"]);//  
  131.              }else{  
  132.                  $line=fread($fp,1024);//       
  133.              }  
  134.          }  
  135.      $lineno++;  
  136.      if($inheader){  
  137.          if($lineno==1)  
  138.          {  
  139.                  // ,  
  140.                  if(preg_match("/^HTTP\/1\.[1|0] (\d{3})/i",$line,$match)){  
  141.                      $rheaders["httpstatus"]=$match[1];  
  142.                  }  
  143.          }  
  144.      // http ,  
  145.          if(preg_match("/^(.*): (.*)$/i",$line,$matches)){  
  146.                         $rheaders[$matches[1]]=$matches[2];  
  147.          }  
  148.      }  
  149.      if($inheader&&($line=="
    "
    ||$line=="\r
    "
    )){  
  150.      $inheader=0;  
  151.      continue;  
  152.      }  
  153.      if($inheader==0)  
  154.      {  
  155.          //  
  156.      $conntent.=$line;  
  157.      }  
  158.      }  
  159.     fclose($fp);  
  160.     return array($rheaders,$conntent);  
  161. }  
  162. ?> 

좋은 웹페이지 즐겨찾기