JSON / CURL问题

时间:2015-04-22 13:36:42

标签: php json curl

我的CURL请求包含两个变量,如下所示:

<?php
$id             =       $_GET["id"];
$review         =       $_GET["review"];
$url = 'http://edward/~treeves/ratingJSON.php';

$jsonData = array("id" => "$id", "review" => "$review");

$ch = curl_init($url);

$jsonDataEncoded = json_encode($jsonData);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('json' => $jsonDataEncoded));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

$result = curl_exec($ch);
?>

并将其发布到以下所示的网络服务:

<?php
header("Content-type: application/json");


    try {
        $conn           =       new PDO("mysql:host=localhost;dbname=treeves;", "treeves", "oopheiye");
        $json           =       $_POST["json"];
        $data           =       json_decode ($json, true);      
        $result         =       $conn->query("INSERT INTO poi_reviews (poi_id, review) 
                                              VALUES ('$data[ID]', '$data[review]')");

        } catch (Exception $e) {
        echo $e->getMessage();
    }
?>

但是,插入的数据是空白的。当我在网络服务上使用var_dump($data)时,会显示1 NULL。我认为这与Web服务工作时CURL文件中的变量有关。有任何想法吗?

更新 取出HTTP标头并使用'var_dump($ data,$ error === JSON_ERROR_UTF8)'返回以下内容:

array(2) { ["id"]=> string(4) "1014" ["review"]=> string(1) "2" } bool(false)

1 个答案:

答案 0 :(得分:1)

在这里,您使用一个具有(JSON编码数据的)值的密钥(json)设置表单编码数据:

curl_setopt($ch, CURLOPT_POSTFIELDS, array('json' => $jsonDataEncoded));

在这里,您告诉服务器您正在发送JSON而不是形成编码数据。

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 

上述之一必须是错误的,因为它们是矛盾的。

在这里,您尝试阅读表单编码数据:

$_POST["json"];

声称您发送普通JSON是错误的(您的JSON封装在表单编码中)。

删除此行:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));