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 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
PHP 之 写时复制介绍(Copy On Write)
May 13 PHP
YII实现分页的方法
Jul 09 PHP
2014年10个最佳的PHP图像操作库
Jul 14 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 PHP
PHP中的表达式简述
May 29 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 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之生成GIF动画的实现方法
2013/06/07 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
JavaScript创建对象的七种方式全面总结
2017/08/21 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
python实现linux下抓包并存库功能
2018/07/18 Python
python3安装speech语音模块的方法
2018/12/24 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
应届毕业生自我评价分享
2013/12/15 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
教师三严三实心得体会
2014/10/11 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
爱的教育读书笔记
2015/06/26 职场文书
金榜题名主持词
2015/07/02 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
Java设计模式之享元模式示例详解
2022/03/03 Java/Android