ArangoDB无法使用curl发送请求

时间:2016-05-04 17:27:05

标签: http post curl d arangodb

我无法解决我做错的事情,但当我发送下一个curl请求时,我收到错误:

echo {"id":1,"question":"aaa"},{"id":2,"question":"bbb?"} | curl -X POST --data-binary @- --dump - http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers


HTTP/1.1 100 (Continue)

HTTP/1.1 400 Bad Request
Server: ArangoDB
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
Content-Length: 100

{"error":true,"errorMessage":"failed to parse json object: expecting EOF","code":400,"errorNum":600}

有什么想法吗?我把它包起来[ ...... ]。什么都没有帮助。 使用[ ... ]验证程序将此标记为有效

与D.相同。这是我的代码:

void sendQuestionsToArangoDB(Json questions)
{
    string collectionUrl = "http://localhost:8529/_db/otest/_api/document/?collection=sitetestanswers"; 

    auto rq = Request();
    rq.verbosity = 2;
    string s = `{"id":"1","question":"foo?"},{"id":2}`;
    auto rs = rq.post(collectionUrl, s, "application/json");
    writeln("SENDED");
}

-

 POST /_db/otest/_api/document/?collection=sitetestanswers HTTP/1.1
 Content-Length: 37
 Connection: Close
 Host: localhost:8529
 Content-Type: application/json

 HTTP/1.1 400 Bad Request
 Server: ArangoDB
 Connection: Close
 Content-Type: application/json; charset=utf-8
 Content-Length: 100
 100 bytes of body received

对于D我使用此lib:https://github.com/ikod/dlang-requests 与振动相同的问题。

3 个答案:

答案 0 :(得分:3)

ArangoDB不了解JSON,如果它来自像[...]那样的数组。它应该作为键值传递。因此,如果你需要传递数组,它应该有键mykey : []

这是工作代码:

import std.stdio;
import requests.http;

void main(string[] args) 
{
    string collectionUrl = "http://localhost:8529/_db/otest/_api/document?collection=sitetestanswers"; 

    auto rq = Request();
    rq.verbosity = 2;
    string s = `{"some_data":[{"id":1, "question":"aaa"},{"id":2, "question":"bbb"}]}`;
    auto rs = rq.post(collectionUrl, s, "application/json");
    writeln("SENDED");
}

otest - 数据库名称

sitetestanswers - 集合名称(应在DB中创建)

答案 1 :(得分:1)

echo '[{"id":1,"question":"aaa"},{"id":2,"question":"bbb?"}]'

应该做的伎俩。你需要在JSON周围加上滴答声。数组括号是必要的,否则这是无效的JSON。

答案 2 :(得分:1)

您正在尝试发送多个文档。原始问题中的数据用逗号({"id":1,"question":"aaa"},{"id":2,"question":"bbb?"})分隔文档,这是无效的JSON。因此,来自ArangoDB的failed to parse json object答案。

将文档放入尖括号([ ... ]),因为一些评论员建议将使请求有效负载再次成为有效的JSON。

但是,您要将数据发送到处理单个文档的服务器端点。 POST /_api/document/?collection=...的API目前一次只接受一个文档。它不适用于单个请求中的多个文档。它需要一个JSON对象,每当发送不同的东西时,它都会以错误代码响应。

如果您正在寻找批量插入内容,请尝试使用此处手册中所述的API POST /_api/importhttps://docs.arangodb.com/HttpBulkImports/ImportingSelfContained.html

这将在单个请求中使用多个文档。 ArangoDB 3.0还允许将多个文档发送到POST /_api/document?collection=... API,但此版本尚未发布。不过,很快就会提供技术预览。