PHP 用于开发 webservice 的 API 接口与客户端做数据交互时不一定会使用 PHP 可以处理的数据格式进行通信,比如 API 常用的 json xml,在此场景下我们需要使用其他的方式获取客户端发来的数据然后进行处理,下面我们就实例模拟下客户端请求 PHP API 场景下的数据交互方式。
同时要理解 get 请求并未携带表单数据,get 请求的本质是请求服务器的某一资源,其向服务器发送的数据都位于请求头的 Query String/Query Path 中,请求头是 uri,注意理解 get 请求的语意,是去服务器获取资源而不是向服务器发送“数据”。 post 请求则是载有 Form Data 即表单数据的, 是想服务器发送 “数据” 的
get post
可以看出get的参数都是附在请求头中,并不像post中有content-length /content-type /from data 这些描述请求携带的数据内容的属性值
PHP 支持的数据格式(注意:这里说的支持不是指简单的获取到,意为可以进行自动处理,自动填充到 $_POST/ $_FILES中去,再次强调,get 请求并没有向服务器发送“数据”,它是取,不是存,所以 $_GET 的是参数而不是数据)
application/x-www-form-urlencoded 普通的表单数据
multipart/form-data 上传文件的表单 enctype="multipart/form-data"
PHP 不支持的数据格式
application/json
application/xml
不能处理但可以获取到,你可以自己手动处理,参照表
application/x-www-form-urlencoded | multipart/form-data | application/json | application/xml | |
php://input | 可获取 | 不可获取 | 可获取 | 可获取 |
$_POST | 可获取 | 可获取 | 不可获取 | 不可获取 |
$HTTP_RAW_POST_DATA | 可获取 | 不可获取 | 可获取 | 可获取 |
PS: $HTTP_RAW_POST_DATA 已经被 PHP7 废弃,原因是 php://input 完全囊括了它的所有功能,且其对服务器的压力要比 php://input 大很多,最懦弱的是它默认配置下是让位 $_POST 的,如果 $_POST 能处理数据的话他就得靠边站,当然你可以配置 php.ini 将 always_populate_raw_post_data 配置项打开,则会一直填充其所能识别的数据,即便 $_POST 的也能处理。
php://input: 除数据类型为 multipart/form-data 的不能识别外,其他格式都可以获取,而后我们可以根据数据类型处理
$_POST: 可以识别 application/x-www-form-urlencoded multipart/form-data 格式,json xml 无法识别
$HTTP_RAW_POST_DATA :识别能力与 php://input 相同,默认配置下与 $_POST 互斥且优先级低于 $_POST
先贴出服务端代码
注意当发送的数据为 multipart/form-data 时 PHP 会将文件类型的数据存放在 $_FILES 中,文本的存放于 $_POST 中,但他们是同一组的,都是 from data 中的数据,与 $_GET 是不同的,$_GET 中填充的是请求头中 Query String 的参数
<?php/** * @author sallency * @date 2016-3-4 11:03:23 * @desc 简单模拟PHP作为API时如何处理各种格式的数据 */error_reporting(0);echo "==== 客户端发送的数据格式 =====" . PHP_EOL;echo "REQUEST_METHOD: " . $_SERVER['REQUEST_METHOD'] . PHP_EOL;echo "ACCEPT: " . $_SERVER['HTTP_ACCEPT'] . PHP_EOL;echo "CONTENT_TYPE: " . ($_SERVER['CONTENT_TYPE'] ? $_SERVER['CONTENT_TYPE'] : "null") . PHP_EOL;echo PHP_EOL . "===== php://input 数据 ========" . PHP_EOL;echo file_get_contents('php://input') . PHP_EOL;echo PHP_EOL . '===== $_POST 数据 =============' . PHP_EOL;print_r($_POST);//当 multipart/form-data 类型时文件数据是存放在 $_FILES 中的 文本则 $_POST 中echo PHP_EOL . '===== $_FILES 数据 =============' . PHP_EOL;print_r($_FILES);echo PHP_EOL . '===== $HTTP_RAW_POST_DATA =====' . PHP_EOL;echo $HTTP_RAW_POST_DATA ? $HTTP_RAW_POST_DATA : 'null' . PHP_EOL;?>
1、发送 application/x-www-form-urlencoded 标准数据
可以看出 php://input 和 $_POST/$_FILES 里都能正常识别接收此类型的数据,其实 $_HTTP_RAW_POST_DATA 也能接受,但我们说过默认情况下它和 $_POST/$_FILES 是互斥且优先级低,所以 $_POST/$_FILES 中有数据时它就不会被填充了,可修改配置让他一直填充自己可识别的数据。
2、发送 multipart/form-data
php://input 和 $HTTP_RAW_POST_DATA 为空,说明它俩无法识别此类行的数据流(其实也只是不能识别此类行的,其他的都没问题),$_POST/$_FILES 则可以正常识别
3、发送 application/json 格式
数据体:
php://input 和 $HTTP_RAW_POST_DATA 可识别, $_POST 则无法识别
4、发送 application/xml 格式
数据体:
php://input 和 $HTTP_RAW_POST_DATA 可识别, $_POST 则无法识别
总结 当然还有很多其他的数据类型我们就不做测试了,大家可以自己动手。
application/x-www-form-urlencoded 是 PHP 的标准数据流类型, 可以被三者识别
multipart/form-data 只能被 $_POST/$_FILES 识别处理,另外的两者无法识别
application/json application/xml 等就只能被 php://input 和 $HTTP_RAW_POST_DATA 识别了,这也是我们日常开发接口时往往使用 php://input 数据输入流来获取客户端请求携带的数据

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器