近期项目,合作方所提供的数据通信API,采用servlet服务端doPost()接收各项请求参数;双方系统交互(请求/响应)均由后台逻辑自动完成,即不通过FORM提交请求方式实现,因此后台处理逻辑需模拟HTTP请求并使用POST方式向对方发送数据。

因在系统中常用,略为笔记,PHP模拟POST请求代码如下:

$host ="202.112.xxx.xxx";

$port =8099;

$path ='/servicepath';

$cmd = "BALANCE";

$userName="test";         

//Build Request String      

$xml  = '<?xml version="1.0"?>' ;    

$xml .= '<eload>' ;    

$xml .= '<command>'.$cmd .'</command>' ;    

$xml .= '<userid>'.$userName.'</userid>' ;    

$xml .= '</eload>' ;        

$errno  = '' ;    

$errstr = '' ;                              

$time      = date('His') ;                

//Create Socket    

$fp = fsockopen( $host, $port, $errno, $errstr, 10 ) or exit( $errstr."--->".$errno ) ;    

$length = strlen( $xml ) ;        

//Create Http Header with Post Method    

$header  = "POST http://".$host.":".$port.".$path."HTTP/1.1\r\n" ;      

$header .= "Accept: */*\r\n" ;      

$header .= "Accept-Language: zh-cn\r\n" ;     

$header .= "Content-Type: text/xml; charset=ISO-8859-1\r\n" ;     

$header .= "Accept-Encoding: gzip, deflate\r\n" ;      

$header .= 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; ';  

$header .= 'Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; ';   

$header .= "NET CLR 3.0.30729; Media Center PC 6.0)\r\n" ;      

$header .= "Host: ".$host.":".$port."" ;      

$header .= "Content-Length: ".$length."\r\n" ;     

$header .= "Connection: Keep-Alive\r\n" ;      

$header .= "Pragma: no-cache\r\n\r\n" ;

    

//Link Request data      

$header .= $xml."\r\n" ;   

//Send Request       

fputs( $fp, $header) ;     

$inheader = 1 ;       

while( !feof($fp) ){                    

    $line = fgets( $fp, 1024 ) ;                      

    //Get Response                    

    if( $inheader && ($line == "\n" || $line == "\r\n") ){            

      $inheader = 0 ;       

    }        

     

    if($inheader == 0){            

        //echo $line ;            

        $result = $line;        

    }   

}        

//Clost Socket

fclose( $fp ) ;

相信仍有不少童鞋在此处困惑,特共享之~

Sky

343025026