PHP模拟http请求的方法详解
本文实例讲述了PHP模拟http请求的方法。分享给大家供大家参考,具体如下:
方法一:利用php的socket编程来直接给接口发送数据来模拟post的操作。
建立两个文件post.php,getpost.php
post.php内容如下:
<?php $flag=0; $params=''; $errno=''; $errstr=''; //要post的数据 $argv=array( 'var1'=>'abc', 'var2'=>'howareyou,myfriend??'); //构造要post的字符串 foreach($argvas$key=>$value){ if($flag!=0){ $params.="&"; $flag=1; } $params.=$key."=";$params.=urlencode($value); $flag=1; } $length=strlen($params); //创建socket连接 $fp=fsockopen("localhost",81,$errno,$errstr,10)orexit($errstr."--->".$errno); //构造post请求的头 $header="POST/flandy/getpost.phpHTTP/1.1\r\n"; $header.="Host:127.0.0.1\r\n"; $header.="Referer:/flandy/post.php\r\n"; $header.="Content-Type:application/x-www-form-urlencoded\r\n"; $header.="Content-Length:".$length."\r\n"; $header.="Connection:Close\r\n\r\n"; //添加post的字符串 $header.=$params."\r\n"; //发送post的数据 fputs($fp,$header); $inheader=1; while(!feof($fp)){ $line=fgets($fp,1024);//去除请求包的头只显示页面的返回数据 if($inheader&&($line=="\n"||$line=="\r\n")){ $inheader=0; } if($inheader==0){ echo$line; } } fclose($fp); ?>
getpost.php的内容如下:
<?php echo"thisisthedataposted"; echo"<pre>"; print_r($_REQUEST); echo"</pre>"; ?>
结果输出:
thisisthedataposted Array ( [var1]=>abc [var2]=>howareyou,myfriend?? )
以上代码在本机81端口下已经通过测试。
方法二:使用PHP的curl扩展或HttpClient.class.php类,这两个非常类似,下面简单的列出curl的实现代码。
两个文件post2.php和getpost2.php
post2.php的内容如下:
<?php $psecode='NDE005'; $website='www.baidu.com'; $amt=1; $pwd=123456; $ch=curl_init(); $curl_url="http://localhost:81/flandy/getpost2.php?web=".$website. "&pwd=".$pwd."&action=check&pseid=".$psecode. "&amt=".$amt; curl_setopt($ch,CURLOPT_URL,$curl_url); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//不直接输出,返回到变量 $curl_result=curl_exec($ch); $result=explode(',',$curl_result); curl_close($ch); print_r($result); ?>
getpost2.php的内容如下:
<?php echo"returndata<br>"; echo"<pre>"; print_r($_REQUEST); echo"</pre>"; ?>
结果输出:
Array([0]=>returndata Array ( [web]=>'wwwbaiducom' [pwd]=>123456 [action]=>check [pseid]=>'NDE005' [amt]=>1 ) )
方法三:这个要借助第三方类库HttpClient
可以到这里下载:http://scripts.incutio.com/httpclient/
或者点击此处本站下载。
<?php require_once'HttpClient.class.php'; $params=array('web'=>'www.baidu.com', 'pwd'=>'123456', 'action'=>'check', 'pseid'=>'NDE005', 'amt'=>1); $pageContents=HttpClient::quickPost('http://localhost:81/flandy/getpost3.php',$params); $result=explode(',',$pageContents); print_r($result); ?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《phpcurl用法总结》、《phpsocket用法总结》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。