PHP使用stream_context_create()模拟POST/GET请求的方法


Posted in PHP onApril 02, 2016

本文实例讲述了PHP使用stream_context_create()模拟POST/GET请求的方法。分享给大家供大家参考,具体如下:

有时候,我们需要在服务器端模拟 POST/GET 等请求,也就是在 PHP 程序中去实现模拟,改怎么做到呢?或者说,在 PHP 程序里,给你一个数组,如何将这个数组 POST/GET 到另外一个地址呢?当然,使用 CURL 很容易办到,那么如果不使用 CURL 库,又该怎么办呢?其实,在 PHP 里已经有相关的函数实现了,这个函数就是接下来要讲的 stream_context_create()。

直接 show you the code,这是最好的方法:

$data = array(
    'foo'=>'bar', 
    'baz'=>'boom', 
    'site'=>'localhost', 
    'name'=>'nowa magic'); 
$data = http_build_query($data); 
//$postdata = http_build_query($data);
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type:application/x-www-form-urlencoded',
        'content' => $data
        //'timeout' => 60 * 60 // 超时时间(单位:s)
    )
);
$url = "http://localhost/test2.php";
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;

http://localhost/test2.php 的代码为:

$data = $_POST;
echo '<pre>';
print_r( $data );
echo '</pre>';

运行结果为:

Array
(
  [foo] => bar
  [baz] => boom
  [site] => localhost
  [name] => nowa magic
)

一些要点讲解:

1. 以上程序用到了 http_build_query() 函数,如果需要了解,可以参看 前面一篇《PHP使用http_build_query()构造URL字符串的方法》。

2. stream_context_create() 是用来创建打开文件的上下文件选项的,比如用POST访问,使用代理,发送header等。就是 创建一个流,再举一个例子吧:

$context = stream_context_create(array( 
    'http' => array( 
        'method' => 'POST', 
        'header' => sprintf("Authorization: Basic %s\r\n", base64_encode($username.':'.$password)). 
        "Content-type: application/x-www-form-urlencoded\r\n", 
        'content' => http_build_query(array('status' => $message)), 
        'timeout' => 5, 
    ), 
)); 
$ret = file_get_contents('http://twitter.com/statuses/update.xml', false, $context);

3. stream_context_create创建的上下文选项即可用于流(stream),也可用于文件系统(file system)。对于像 file_get_contents、file_put_contents、readfile直接使用文件名操作而没有文件句柄的函数来说更有用。stream_context_create增加header头只是一部份功能,还可以定义代理、超时等。这使得访问web的功能不弱于curl。

4. stream_context_create() 作用:创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设置、代理服务器、请求方式、头信息设置的特殊过程。

5. stream_context_create 还能通过增加 timeout 选项解决file_get_contents超时处理:

$opts = array(
  'http'=>array(
  'method'=>"GET",
  'timeout'=>60,
 )
);
//创建数据流上下文
$context = stream_context_create($opts);
$html =file_get_contents('http://localhost', false, $context);
//fopen输出文件指针处的所有剩余数据:
//fpassthru($fp); //fclose()前使用

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 使用post,get的一种简洁方式
Apr 25 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
php实例分享之二维数组排序
May 15 PHP
浅谈php命令行用法
Feb 04 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
Yii2中datetime类的使用
Dec 17 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
php中的explode()函数实例介绍
Jan 18 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
php post换行的方法
Feb 03 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 #PHP
PHP函数import_request_variables()用法分析
Apr 02 #PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 #PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 #PHP
PHP递归实现层级树状展开
Apr 01 #PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 #PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 #PHP
You might like
PHP中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
php时区转换转换函数
2014/01/07 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
Node.js事件驱动
2015/06/18 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
Vue.extend实现挂载到实例上的方法
2019/05/01 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
通信工程毕业生自荐信
2013/11/01 职场文书
电子商务专业自我鉴定
2013/12/18 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
司马光教学反思
2014/02/01 职场文书
民主生活会整改措施(党员)
2014/09/18 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
工作报告范文
2019/06/20 职场文书
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫
Python内置的数据类型及使用方法
2022/04/13 Python