如何用 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_decode
和 file_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);
我正在使用 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_decode
和 file_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);