0

HTTPAPIを介してNeo4jsTraverserを使用しようとしています。コマンドラインで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 に答える