我最近在 Mozilla 的工作让我在 Bugzilla 和 Phabricator 之间创建了一个类似 OAuth 的身份验证事务。这个任务让我回到了 PHP 的世界,除了为这个博客创建 WordPress 主题和插件之外,我没有接触太多语言(从版本 ~5.2 开始)。回到多年未接触的语言感觉就像是一种全新的体验;您会注意到在过去的几年中您不会猜到的模式和方法。
部分身份验证交易要求 Phabricator 接收包含 JSON 数据的 POST 请求。我原以为数据会落在 $_POST
中,但变量是空的;我到底是怎么得到 POST 数据的?要使用 PHP 获取 POST JSON,请使用以下命令:
# Get JSON as a string $json_str = file_get_contents('php://input'); # Get as an object $json_obj = json_decode($json_str);
file_get_contents
,虽然我只是用来从本地文件或传统 URL 中检索内容,但它允许您使用特殊的 php://input
地址检索 JSON数据作为字符串。从那里您可以使用 json_decode
将 JSON 字符串转换为可用的对象/数组。
JSON 不通过正常的 $_POST
处理是有道理的,因为实际上没有 key
本身;本质上,您只需要作为一个整体的数据“blob”,它由 php://input
提供。您可以使用 cURL 测试 JSON+POST 处理。