PHP Curl发送JSON数据

时间:2017-09-18 14:36:27

标签: php json curl

我正在关注本教程: https://lornajane.net/posts/2011/posting-json-data-with-php-curl

我要做的是通过CURL POST JSON数据

$url = "http://localhost/test/test1.php";  
$data = array("name" => "Hagrid", "age" => "36");

$data_string = json_encode($data);                                                                                                                     
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-type: application/json", "Content-Length: " . strlen($data_string)));
$result = curl_exec($ch);
var_dump($result);

当我发布纯文本数据时,我能够收到它,但是当我尝试通过JSON时,我无法收到它。

这是我的test1.php

test1.php

print_r($_POST);
print_r($_POST);

任何帮助将不胜感激。 感谢

2 个答案:

答案 0 :(得分:2)

当您POST JSON DatacURL时,您必须使用php://input。您可以像使用它一样使用它:

// get the raw POST data
$rawData = file_get_contents("php://input");

// this returns null if not valid json
return json_decode($rawData, true);  // will return array
  

php://input是一个只读流,允许您读取原始数据   来自请求机构

PHP超全局$_POST,只应该包装

的数据
  • application/x-www-form-urlencoded(简单表单帖子的标准内容类型)或
  • multipart/form-data-encoded(主要用于文件上传)

内容现在是application/json(或至少没有上述内容),因此PHP的$_POST -wrapper不知道如何处理(还)。

Reference

答案 1 :(得分:2)

$ _POST中没有JSON数据。您需要使用file_get_contents('php://input');

你还需要json_decode它。

$json = json_decode(file_get_contents('php://input'));

var_dump($json);