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+Html+缓存
Dec 20 PHP
PHP+MySQL 制作简单的留言本
Nov 02 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
php session安全问题分析
Jun 24 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
php发送post请求函数分享
Mar 06 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
通过php动态传数据到highcharts
Apr 05 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
CI框架网页缓存简单用法分析
Dec 26 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 jsonp单引号转义
2014/11/23 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
PHP实现简单登录界面
2019/10/23 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
详解vue在项目中使用百度地图
2019/03/26 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
Python子类继承父类构造函数详解
2019/02/19 Python
python批量下载抖音视频
2019/06/17 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
师范应届毕业生自荐信
2013/11/18 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
借条格式范本
2015/05/25 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
详解Vue的options
2021/05/15 Vue.js
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
linux目录管理方法介绍
2022/06/01 Servers