Welcome

首页 / 网页编程 / PHP / 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"=>"how are you , my friend??");//构造要post的字符串foreach ($argv as $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) or exit($errstr."--->".$errno);//构造post请求的头$header = "POST /flandy/getpost.php HTTP/1.1
";$header .= "Host:127.0.0.1
";$header .= "Referer:/flandy/post.php
";$header .= "Content-Type: application/x-www-form-urlencoded
";$header .= "Content-Length: ".$length."
";$header .= "Connection: Close

";//添加post的字符串$header .= $params."
";//发送post的数据fputs($fp,$header);$inheader = 1;while (!feof($fp)) {$line = fgets($fp,1024); //去除请求包的头只显示页面的返回数据if ($inheader && ($line == "
" || $line == "
")) { $inheader = 0;}if ($inheader == 0) { echo $line;}}fclose($fp);?>
getpost.php的内容如下:
<?phpecho "this is the data posted";echo "<pre>";print_r($_REQUEST);echo "</pre>";?>
结果输出:
this is the data postedArray([var1] => abc[var2] => how are you , my friend??)
以上代码在本机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的内容如下:
<?phpecho "returndata<br>";echo "<pre>";print_r($_REQUEST);echo "</pre>";?>
结果输出:
Array ( [0] => returndataArray([web] => "wwwbaiducom"[pwd] => 123456[action] => check[pseid] => "NDE005"[amt] => 1))
方法三:这个要借助第三方类库HttpClient
可以到这里下载:http://scripts.incutio.com/httpclient/
或者点击此处本站下载

<?phprequire_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相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《php socket用法总结》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。