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开发GUI
Oct 09 PHP
php 无法载入mysql扩展
Mar 12 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
zend framework中使用memcache的方法
Mar 04 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
Laravel中log无法写入问题的解决
Jun 17 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 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
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
基于jquery的超简单上下翻
2010/04/20 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
jQuery中attr()与prop()函数用法实例详解(附用法区别)
2015/12/29 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
vue实现购物车列表
2020/06/30 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
python应用文件读取与登录注册功能
2019/09/23 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
python tkinter canvas使用实例
2019/11/04 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python类如何定义私有变量
2020/02/03 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
商业街策划方案
2014/05/31 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
2015年调度员工作总结
2015/04/30 职场文书
音乐研修感悟
2015/11/18 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
Python socket如何解析HTTP请求内容
2022/02/12 Python