php - 如何将 POST 请求的完整正文记录到文件中以进行调试?
问题描述
我已经阅读了这个问题的许多“可能重复”,并在这篇文章中使用了其中一个的代码,但我似乎无法确切地看到这个问题在问什么。
作为与 PHP 或网站无关的更大项目的一部分,我需要获取对我的共享服务器的 POST 请求的主体。按照这个 SO post的想法,我在服务器的 www 文件夹中创建了一个 php 文件,其中包含以下内容
网络钩子.php
<?php
error_log("webhook running");
file_put_contents("post.log", print_r($_POST, true));
?>
然后,我使用第三方公司向我的服务器上的该脚本发布了一条测试消息,该脚本收到了 200 响应。
该帖子的正文包含
Body
{
"events": [
{
"id": "EVTESTDCQAHTYRDYM72",
"created_at": "2021-01-04T12:17:41.536Z",
"resource_type": "payments",
"action": "paid_out",
"links": {
"payment": "index_ID_1234567"
},
"details": {
"origin": "mycompanys",
"cause": "payment_paid_out",
"description": "The payment has been paid out by mycompany."
},
"metadata": {}
}
]
}
但我服务器上的日志文件只包含
Array
(
)
我不是 PHP 程序员(只需完成我需要完成的工作即可)出于调试和开发目的,我应该如何更改我的 webhook.php 脚本,以便我可以看到发送的所有数据?
如果我能做到这一点,那么我可能会弄清楚如何对每个元素进行正确处理,而这些元素并不总是具有上述结构。
解决方案
PHP 仅在请求 Content-Type 为application/x-www-form-urlencoded
或时填充 $_POST multipart/form-data
。如果您发送其他任何内容,那么您必须使用php://input
来读取原始 POST 正文,并自己解析它。
您显示的示例 JSON 似乎是有效的 - 所以如果 json_decode 在这里没有给您预期的结果,那么您的输入数据可能不是您最初期望的。
这里的一个基本调试错误是您只查看多个“复合”操作的最终结果。首先记录file_get_contents('php://input')
返回的内容,看看这是否真的是您所期望的。如果不是一开始,那么只查看 json_decode 返回的内容并没有帮助。
推荐阅读
- java - 如何使用java在用户系统中打开excel文件
- python - 在 Keras 模型中向 Conv1D 层提供输入时出错
- azure - 如何使用 ADF V1 将数据插入计算列
- javascript - 使用 LocalStorage 时 Javascript 幻灯片无法正常工作
- python - Grok Python Word 计数器
- scala - 通过将键中的值覆盖为redis列表来编写spark数据帧
- bash - 将传感器输出提取到排序数组中
- java - 科尔多瓦构建问题 - javac - 版本无法运行
- python - 迭代和词形化列表
- haskell - 在 Esqueleto 中加入子查询的结果