您的位置:首页 > 其它

非FORM格式,使用POST方式向servlet发送请求

2012-08-05 11:51 726 查看
近期项目,合作方所提供的数据通信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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐