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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
php使用json_encode对变量json编码
Apr 07 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP分享图片的生成方法
Apr 25 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
PHP+Redis开发的书签案例实战详解
Jul 09 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实现维护文件代码
2007/06/14 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
layui表格数据重载
2019/07/27 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
python中执行shell命令的几个方法小结
2014/09/18 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
python定时关机小脚本
2018/06/20 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
会计毕业生自荐信
2013/11/21 职场文书
仓库班组长岗位职责
2013/12/12 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
培训协议书范本
2014/04/22 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
优秀员工事迹材料
2014/12/20 职场文书