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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
Views rows style模板重写代码
May 16 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
9个经典的PHP代码片段分享
Dec 18 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
Symfony核心类概述
Mar 17 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
php常用日期时间函数实例小结
Jul 04 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 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
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
PHP常用技巧汇总
2016/03/04 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
js对象的构造和继承实现代码
2010/12/05 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
基于python中theano库的线性回归
2018/08/31 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
医生实习工作总结的自我评价
2013/09/27 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
校园广播稿精选
2014/10/01 职场文书
2014年林业工作总结
2014/12/05 职场文书
全陪导游词
2015/02/04 职场文书
歌咏比赛主持词
2015/06/29 职场文书
话题作文之诚信
2019/11/28 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python