如何用 PHP 读取 curl post

How to read a curl post with PHP

我正在使用 curl 到 post JSON 到 PHP 我正在努力读取 PHP 中的数据。

我就是这样使用的 curl ,

curl -H "Content-Type: application/json" -X POST -d '{"email":"admin@example.com","password":"xyz"}' http://example.com/api/login

这是我在 PHP

中尝试过的

1) 使用 ZF2 函数:

$email = (string) $this->params()->fromPost('email', null);

2) 和

$email = $_POST['email'];

但是以上都不起作用。

从 CURL 读取 post 的正确方法是什么?

在您的示例中,您传递了一个 JSON 对象字符串作为 http 正文。要执行您描述的操作,您需要解码传入的 JSON 字符串。

您可以使用 json_decodefile_get_contents('php://input') 将电子邮件放入变量中:

$body = json_decode(file_get_contents('php://input'), true);
$email = $body['email'];
echo $email

但是为什么你的例子失败了?

您已将 email 视为表单 post 参数。但是因为你在 curl 中将它作为正文中的 JSON 字符串传递,所以 $_POST['email'] 结果没有你期望的值。

如果您的客户行为类似于以下内容,则您的示例应该有效:

<html>
<body>

<form action="myfile.php" method="post">
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

我刚在发布的 Apigility json 中遇到了这个问题。我就是这样解决的。这可能对您有用,具体取决于您的请求类型。

$data = json_decode($this->getRequest()->getContent(), true);
$email = $data['email'];
echo $email

万一它可以帮助其他人集成 Apigility 和 ZfcUser,这是我想出的一个小技巧,可以将 Json 有效负载转换为 Post 参数

    /** @var \ZF\ContentNegotiation\Request $request */
    $request = $this->getRequest();
    $contentArray = json_decode($request->getContent(), true);

    // Turn content into a Post, because the ZfcUser triggered events expect form data in the Post
    $newPost = new \Zend\Stdlib\Parameters($contentArray);
    $request->setPost($newPost);