#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));