PHP获取HTTP body内容的方法


Posted in PHP onDecember 31, 2018

有时候我们获取数据时需要根据Header中的格式来解析,比如上传一个json而不是一个文本。这里用到了 php输入|输出流 的概念。

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

本文涉及到了了,php://input,详尽内容请参阅官网:点击查看官网

php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。

模拟代码

// server.php
switch($_SERVER['CONTENT_TYPE']){
 case 'application/json':
 // 这里通过输入端来获取数据
 $body = file_get_contents('php://input');
 echo '这是一个json:', $body;
 break;
 // ...
}
// client_web.php, 注意这里使用了 axios
// ...
service = axios.create({
 baseURL: 'mydomain',
 validateStatus:function(status){
 if(500 >= status) alert('server fails');
 }
});

// 发一个请求
service.post(url, {
 // ...
 headers: {'Content-Type':'application/json'},
 data:'{"code":100}'
 // ...
});

// 全局设置也没问题
service.interceptors.request.use(function(config){
 // 这里设置请求头
 config.headers['Content-Type'] = 'application/json';
 return config;
}, function(err){});

引申阅读

以下为官方文档小抄

PHP 输入|输出流分为: php://stdin, php://stdout 和 php://stderr

php://stdin、php://stdout 和 php://stderr 允许直接访问 PHP 进程相应的输入或者输出流。 数据流引用了复制的文件描述符,所以如果你打开 php://stdin 并在之后关了它, 仅是关闭了复制品,真正被引用的 STDIN 并不受影响。 注意 PHP 在这方面的行为有很多 BUG 直到 PHP 5.2.1。 推荐你简单使用常量 STDIN、 STDOUT 和 STDERR 来代替手工打开这些封装器。

其中 php://stdin 是只读的, php://stdout 和 php://stderr 是只写的。

php://output

php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区。

php://fd

php://fd 允许直接访问指定的文件描述符。 例如 php://fd/3 引用了文件描述符 3。

php://memory 和 php://temp

php://memory 和 php://temp 是一个类似文件 包装器的数据流,允许读写临时数据。 两者的唯一区别是 php://memory 总是把数据储存在内存中, 而 php://temp 会在内存量达到预定义的限制后(默认是 2MB)存入临时文件中。 临时文件位置的决定和 sys_get_temp_dir() 的方式一致。

php://temp 的内存限制可通过添加 /maxmemory:NN 来控制,NN 是以字节为单位、保留在内存的最大数据量,超过则使用临时文件。

php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

php://filter 目标使用以下的参数作为它路径的一部分。 复合过滤链能够在一个路径上指定。详细使用这些参数可以参考具体范例。

以上这篇PHP获取HTTP body内容的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
UTF8编码内的繁简转换的PHP类
Jul 09 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
php将数据库导出成excel的方法
May 07 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
php实现无限级分类
Dec 24 PHP
PHP中Http协议post请求参数
Nov 02 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
实例分析PHP中PHPMailer发邮件
Dec 13 PHP
在Laravel中实现使用AJAX动态刷新部分页面
Oct 15 PHP
php两点地理坐标距离的计算方法
Dec 29 #PHP
php如何计算两坐标点之间的距离
Dec 29 #PHP
PHP命名空间简单用法示例
Dec 28 #PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 #PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 #PHP
PHP抽象类基本用法示例
Dec 28 #PHP
php PDO属性设置与操作方法分析
Dec 27 #PHP
You might like
德劲1103的维修打理经验
2021/03/02 无线电
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
一句话JavaScript表单验证代码
2009/08/02 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
建筑工程专业毕业生自荐信
2013/10/19 职场文书
学生党支部先进事迹
2014/02/04 职场文书
初中学习计划书范文
2014/09/15 职场文书
2015年世界卫生日活动总结
2015/02/09 职场文书
质量承诺书格式范文
2015/04/28 职场文书
微信早安问候语
2015/11/10 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Python字典的基础操作
2021/11/01 Python
mysql查看表结构的三种方法总结
2022/07/07 MySQL