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程序设计有所帮助。