如何从cURL调用中接收和处理数据

时间:2016-05-23 08:54:23

标签: php rest curl

我必须从cURL调用发送一个json响应。 用户向file.php发送了一个“test”变量。

在我的php文件中,我使用此代码

$arr = array($arr = array('test' => 'ok'));
echo json_encode($arr);

这是cURL电话

curl --request POST http://www.domain.com/WS/file.php -d '{ "test" : "12341234123412342" }'

以下是答案

[{"test":null}]

获取de POST变量并在我的php文件中处理它的好方法是什么?

由于

修改

以防万一,问题来自cURL调用。这是正确的语法:

curl -H "Content-Type: application/json" -X POST -d "{\"test\":\"12341234123412342\"}" http://www.domain.com/WS/file.php

3 个答案:

答案 0 :(得分:0)

你的问题有点令人困惑:)

所以你的用户在file.php中发送一个变量 你必须卷曲那个变量吗?

为什么不只是

curl --request POST http://www.domain.com/WS/file.php -d '{ "test" : "$_POST['USER_INPUT_VALUE']" }'

还是我错过了什么?

答案 1 :(得分:0)

感谢您的帮助。

你说得对,可能会令人困惑。我必须添加一些新的细节并提供一个更好的例子。

用户在文件test_curl.php中执行该脚本:

// test_curl.php

$url = "http://www.domain.com/WS/file.php";
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);

$data = array(
    'test' => '12345'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$contents = curl_exec($ch);

echo $contents;

curl_close($ch);

这是file.php

// file.php

$arr = array($arr = array('test' => $_POST['test']));
echo json_encode($arr);

我接收了POST变量并且它有效。这是$ content收到的test_curl.php

{"test" => "12345"}

新事实,它适用于test_curl.php。我得到了很好的答案,但是在命令行中使用该代码时...

curl --request POST http://www.domain.com/WS/file.php -d '{ "test" : "12345" }'

......我有这个答案:

[{"test":null}]

最后,我的问题是当我在命令行中调用时,响应为 null 的原因?

答案 2 :(得分:0)

那不会奏效。

在您的帖子数据中,您要发送json/application内容类型。在服务器内部,您期望来自名为test的变量的内容,该变量应仅存在于普通形式的键值主体中,而实际情况并非如此。

因此,您需要json_decode直接发布数据内容的原始主体,然后访问其中的test密钥,如下所示:

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

$arr = array($arr = array('test' => $json['test']);
echo json_encode($arr);