PHP模拟http请求的方法详解


Posted in PHP onNovember 09, 2016

本文实例讲述了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\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 "this is the data posted";
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
?>

结果输出:

this is the data posted
Array
(
  [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的内容如下:

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

PHP 相关文章推荐
php切割页面div内容的实现代码分享
Jul 31 PHP
PHP编程函数安全篇
Jan 08 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
Windows7下的php环境配置教程
Feb 28 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
php通过文件头判断格式的方法
May 28 PHP
PHP邮箱验证示例教程
Jun 01 PHP
php对微信支付回调处理的方法
Aug 23 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
Laravel框架源码解析之反射的使用详解
May 14 PHP
Linux平台PHP5.4设置FPM线程数量的方法
Nov 09 #PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 #PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 #PHP
thinkPHP批量删除的实现方法分析
Nov 09 #PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 #PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 #PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 #PHP
You might like
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
python微信撤回监测代码
2019/04/29 Python
Python笔记之工厂模式
2019/11/20 Python
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
中科方德软件测试面试题
2016/04/21 面试题
课程设计心得体会
2013/12/28 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
员工晚婚的请假条
2014/02/08 职场文书
计生工作先进事迹
2014/08/15 职场文书
房屋过户委托书范本
2014/10/07 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
交通事故责任认定书
2015/08/06 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
浅谈python数据类型及其操作
2021/05/25 Python
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL