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 和 MySQL 基础教程(二)
Oct 09 PHP
PHP XML备份Mysql数据库
May 27 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP设计模式之命令模式的深入解析
Jun 13 PHP
基于PHP中的常用函数回顾
Jul 11 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
php中使用base HTTP验证的方法
Apr 20 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP中多字节字符串操作实例详解
Aug 23 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
构建简单的Webmail系统
2006/10/09 PHP
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php上传文件问题汇总
2015/01/30 PHP
PHP导入导出Excel代码
2015/07/07 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python拼接字符串的7种方法总结
2018/11/01 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
python3中rank函数的用法
2019/11/27 Python
彻底搞懂python 迭代器和生成器
2020/09/07 Python
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
J2EE是技术还是平台还是框架
2016/08/14 面试题
妇产科护士自我鉴定
2013/10/15 职场文书
中学门卫岗位职责
2013/12/26 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
文明寝室申报材料
2014/05/12 职场文书
班训口号大全
2014/06/18 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
公司员工离职感言
2015/08/03 职场文书
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python