我正在尝试通过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 ERROR 500
访问问题 /分贝/数据/节点/ 5 /横动/节点。原因是:
java.lang.String cannot be cast to java.util.Map
任何想法?
答案 0 :(得分: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));