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 相关文章推荐
PHP开发中四种查询返回结果分析
Jan 02 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
关于URL最大长度限制的相关资料查证
Dec 23 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
PHP加密解密类实例分析
Apr 20 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
php7下的filesize函数
Sep 30 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基础学习笔记
2007/03/18 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php返回json数据函数实例
2014/10/09 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
JavaScript实现的商品抢购倒计时功能示例
2017/04/17 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
vue实现公共方法抽离
2020/07/31 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
Python3遍历目录树实现方法
2015/05/22 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
英国著名书店:Foyles
2018/12/01 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
领导视察通讯稿
2015/07/18 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
Python中异常处理用法
2021/11/27 Python