Neo4j использует Traverser через REST HTTP

#php #curl #neo4j

#php #curl #neo4j

Вопрос:

Я пытаюсь использовать Neo4js Traverser через HTTP API. Если я использую его через curl в командной строке, он работает нормально, но когда я пытаюсь использовать его через curl через PHP, я постоянно получаю ошибку.

Это команда 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
  

Есть идеи?

Ответ №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));