get 과 post 요청 시 뮬 레이 션 (사용자 정의 header 와 테스트 CDN 노드 지원)
1. get, post 방법
2. 사용자 정의 매개 변수
3. 사용자 정의 헤더
4. 서버 의 반환 내용 과 header 를 되 돌려 줍 니 다.
5. 특정 서버 요청 url 지원, cdn 노드 테스트 에 적합
코드 는 다음 과 같다.
- <?php
- error_reporting(0);
- $user_agent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10)";
-
- 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());
-
- //list($rheaders,$conntent)=request_url("","","get","http://www.baidu.com/s",array("User-Agent"=>$user_agent),array("wd"=>"test"));
- if($rheaders["httpstatus"]>=200&&$rheaders["httpstatus"]<=300)
- {
-
- // , header
- if($rheaders['Content-Type']!="")
- header('Content-Type: '.$rheaders['Content-Type']);
- echo $conntent;
- // foreach($rheaders as $k => $v)echo "$k: $v<br/>";
- }else
- {
- // 302,301 ,
- if($rheaders["httpstatus"]>=300&&$rheaders["httpstatus"]<=400){
- list($rheaders,$conntent)=request_url("","","get",$rheaders["Location"],array("User-Agent"=> $user_agent),array());
- if($rheaders["httpstatus"]>=200&&$rheaders["httpstatus"]<=300)
- {
- // , header
- if($rheaders['Content-Type'])
- header('Content-Type: '.$rheaders['Content-Type']);
- echo $conntent;
- }
- }
- // foreach($rheaders as $k => $v)echo "$k: $v<br/>";
- }
-
-
-
- /*
- * get,post url ,
- * : $ip:url ip , ,ip $aURL host(ip )
- $port:int,url , ,ip $aURL , 80
- $method:get post, post
- $aURL: url, http://username:password@hostname:port/path?arg=value#anchor
- $headers: , http (Referer,Content-Disposition,Expires,Cookie,Pragma,User-Agent,Accept-Language )
- $headers=array("Referer"=>"http://123.com","User-Agent"=>"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10)");
- $aParamsArray: , post get
- $aParamsArray=array("id"=>123,"name"=>"abc");
- * : : http (http ( 0, -1)),
-
- */
- function request_url($ip,$port,$method,$aURL,$headers,$aParamsArray)
- {
- $rheaders=array();
- $rheaders["httpstatus"]=0;
- // URL host, ,
- $URL=parse_url($aURL);
- if(!$port)
- {
- // 80
- $port=($URL["port"]? $URL["port"]:80);
- }
- if(strcasecmp($method,"get")==0){
- $method="GET";
- }else{
- $method="POST";
- }
- // post
- foreach($aParamsArray as $key=> $value)
- {
- if($flag!=0)
- {
- $params.="&";
- $flag=1;
- }
- $params.=$key."=";
- $params.=urlencode($value);
- $flag=1;
- }
- if($method=="POST")
- {
- // , Content-Length
- $length=strlen($params);
-
- }else
- {
- $length=0;
- // url
- $URL["query"]=$URL["query"]."&".$params;
- }
- if($URL["query"]){
- //
- $URL["path"].="?".$URL["query"].($URL["fragment"]?"#".$URL["fragment"]:"");
- }
- // socket
- $fp=fsockopen($ip==""? $URL["host"]:$ip,$port,$errno,$errstr,10);
- if(!$fp)
- {
- $rheaders["httpstatus"]=-1;
- return array($rheaders,$errstr."--->".$errno);
- }
- //
- unset($headers['Host']);
- unset($headers['Content-Length']);
- unset($headers['Content-Type']);
- // post
- $header="$method ".$URL["path"]." HTTP/1.1\r
";
- $header.="Host:".$URL["host"]."\r
";
- foreach($headers as $k=> $v){
- $header.="$k:$v\r
";
- }
- if(!$header["Content-Type"]){
- $header.="Content-Type:application/x-www-form-urlencoded\r
";
- }
- $header.="Content-Length:".$length."\r
";
- $header.="Connection:Close\r
\r
";
- if($method=="POST")
- {
- // post
- $header.=$params."\r
";
- }
- // echo $header;
- // post
- fputs($fp,$header);
- $inheader=1;
- $lineno=0;
- $conntent="";
-
- while(!feof($fp))
- {
- if($inheader){
- $line=fgets($fp,1024);// header
- }else{
- if($rheaders["Content-Length"]>=0){
- $line=fread($fp,$rheaders["Content-Length"]);//
- }else{
- $line=fread($fp,1024);//
- }
- }
- $lineno++;
- if($inheader){
- if($lineno==1)
- {
- // ,
- if(preg_match("/^HTTP\/1\.[1|0] (\d{3})/i",$line,$match)){
- $rheaders["httpstatus"]=$match[1];
- }
- }
- // http ,
- if(preg_match("/^(.*): (.*)$/i",$line,$matches)){
- $rheaders[$matches[1]]=$matches[2];
- }
- }
- if($inheader&&($line=="
"||$line=="\r
")){
- $inheader=0;
- continue;
- }
- if($inheader==0)
- {
- //
- $conntent.=$line;
- }
- }
- fclose($fp);
- return array($rheaders,$conntent);
- }
- ?>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.