2014-10-02 88 views
0

我嘗試發送一個簡單的Cypher查詢的Neo4j 2.1.3,並得到一個500的迴應:上休息的Neo4j的Cypher查詢返回500響應

POST : http://localhost:7474/db/data/cypher

data = { 
    "query" : "MATCH (it) return it limit 10" 
    } 

嘗試,包括下面的頭的不同變化:

{'content-type': 'application/json',"Accept": 'application/json'} 

所有導致相同的500 http響應。

順便說一句..普通REST API請求,例如:http://localhost:7474/db/data/node工作得很好..

+0

您能分享您用於發送該http請求的確切代碼嗎? – 2014-10-02 10:05:28

+0

也可以檢查data/log/neo4j.log文件中的錯誤消息嗎? – 2014-10-02 10:19:53

+0

沒有代碼...我只是嘗試使用'郵遞員'POST請求。並且日誌中沒有任何痕跡 – skme 2014-10-02 10:36:23

回答

0

顯然問題在於數據的編碼。 不確定究竟是什麼,但我發現它在neo4j-rest-client code

有一個編碼功能。使用這一切,一切正常。

def _json_encode(data, ensure_ascii=False): 

def _any(data): 
    ret = None 
    if isinstance(data, (list, tuple)): 
     ret = _list(data) 
    elif isinstance(data, dict): 
     ret = _dict(data) 
    elif isinstance(data, decimal.Decimal): 
     ret = str(data) 
    elif isinstance(data, datetime.time): 
     ret = data.strftime(options.TIME_FORMAT) 
    else: 
     ret = data 
    return ret 

def _list(data): 
    ret = [] 
    for v in data: 
     ret.append(_any(v)) 
    return ret 

def _dict(data): 
    ret = {} 
    for k, v in data.items(): 
     # Neo4j doesn't allow 'null' properties 
     if v is not None: 
      ret[k] = _any(v) 
    return ret 
ret = _any(data) 
return json.dumps(ret, ensure_ascii=ensure_ascii) 
0

不是100%,但據我所知HTTP標頭是大小寫敏感的,所以儘量使用Content-Type,而不是content-type。如果您仍然收到500,請檢查data/log和/或data/graph.db/messages.log以獲取有用的條目。

+1

HTTP標頭不應區分大小寫http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2。其餘的聽起來不錯:) – JohnMark13 2014-10-02 09:53:46

+0

@ JohnMark13:你說得對。 skme:嘗試跟蹤您通過電報發送的完整請求和響應(包括標題)。 – 2014-10-02 10:02:07

+0

我有,並嘗試所有的選項大寫字母或不。當消除內容類型時,我得到一個415響應,所以我想它確實接受了頭文件。正如我上面提到的,日誌中沒有任何東西可以找到 – skme 2014-10-02 10:38:17