首页 > 解决方案 > 使用 Convertigo 发送复杂 json 请求的最佳方法

问题描述

我有一个复杂的 json 请求,我想将其发布到 api,但我在 Convertigo Studio 中找不到执行此操作的正确方法。谁能告诉我最好的方法来做到这一点?

这是我通过 curl 发送的请求,它给了我结果。这些结果将被前端用于显示数据。


curl -k -H "Accept: application/json" --compressed -XPOST https://myserverurl/api/search -d @- << EOF
{
"api-key":"somekey",
"usage":"someusage",
"criteria":{
    "timestamp":{"from-to":{"date-pattern":"yyyy/MM/dd-HHmmss","from":"2019/07/28-000000","to":"2019/08/27-235959"}},
    "timestamp-field":"timestamp",
    "metric":"*",
    "filter":{
                "and":
                [
                    {"eq":{"attribute":"type","value":"sometype"}},
                    {"simple-query":{"query":"_exists_:city"}},
                    {"neq":{"attribute":"status","value":"1"}}
                ]
            }
},
"info":"someinfo",
"size":10000,
"mode":"last-hits",
"format":{"tabular":{"columns":["col1", "col2","col3"],
"last-hits-columns":["name"],"order-by":[{"name":"name","direction":"ASC"}]},
"timestamp":{"date-pattern":"dd/MM/yyyy HH:mm:ss"}},
"index":"someindex",
"last-hits-count":"1"
}
EOF

我现在想使用适当的连接器和事务将其转换为 Convertigo 方法,但到目前为止我遇到了困难。任何帮助表示赞赏。

更新:所以我设法联系了 API,即通过实现 HTTP_Connector 和 HTTP_Transaction 来复制 curl 的第一部分。服务器正在以预期的方式回答。

现在我不能做的是发布 json 字符串。我已经尝试实现一个 http_single_variable ,它的默认值是那个 json 字符串,但它不起作用,我收到以下错误:

HTTP result {ContentType: application/json, Length: 277}

{"error":{"request":"http://localhost:8550/api/search","message":"Unexpected character ('H' (code 72)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n at [Source: java.io.InputStreamReader@6c195833; line: 1, column: 2]","target":"/search"}}

该错误似乎来自标头,该标头已定义为 Accept, application/json. 当我删除它时,我从服务器收到 HTTP 500 错误。

标签: convertigo

解决方案


要在 Convertigo 请求中发布 JSON 正文,您必须将变量“ __body ”添加到您的事务中:

HTTP 单值变量

如果您的 API 返回 JSON 响应,您应该使用JSON_HTTP_transaction而不是HTTP_Transaction事务。

将“ HTTP verb ”属性事务设置为POST,将“ HTTP headers ”属性设置为“ Content-type, application/json ”。

__body 变量的值由Sequence_JS步骤按顺序设置,如下所示:

var data = {
   "param1": "value1",
   "param2": "value2",
   ...
   };

然后,使用jElement步骤将“数据”转换为 JSON 字符串源:

JSON.stringify(data)

在“表达式”属性中。

下一步是调用您的交易。在 __body Source 中指向 jElement 文本。

这是 Convertigo (7.5.7+) 示例的链接: useBody.car

希望有帮助。


推荐阅读