0

我正在尝试通过 HTTP API 使用 Neo4js Traverser。如果我在命令行上通过 curl 使用它,它可以正常工作,但是当我尝试通过 PHP 通过 curl 使用它时,我总是收到错误消息。

这是 curl 命令:

curl -H Accept:application/json -H Content-Type:application/json -X POST -d '{"order":"depth first"}' http://localhost:7474/db/data/node/5/traverse/node

这是我的 PHP 代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost:7474/db/data/node/5/traverse/node");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept:application/json',
    'Content-Type:application/json'
)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, '"{"order": "depth first"}"');

$output = curl_exec($ch);

echo '<pre>';
var_dump(curl_getinfo($ch));
var_dump($output);

curl_close($ch);

这是我得到的错误:

HTTP 错误 500

访问 /db/data/node/5/traverse/node 时出现问题。原因:

java.lang.String cannot be cast to java.util.Map

有任何想法吗?

4

1 回答 1

1

看起来您在 JSON 字符串之前有引号:

curl_setopt($ch, CURLOPT_POSTFIELDS, '"{"order": "depth first"}"');

可能想试试这个:

curl_setopt($ch, CURLOPT_POSTFIELDS, '{"order": "depth first"}');

编辑:虽然更好,但我会使用带有关联数组的json_encode来确保在必要时正确转义:

$json_data = array("order" => "depth first");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($json_data));
于 2011-05-25T11:11:00.683 回答