如何使用 openedge requestBuilder 同时制作带有参数和 json 负载的 http post

how to make a http post with param and json payload at same time with openedge requestBuilder

我需要使用参数和 json 负载将 post 发送到 url。 例如,在 Postman 中,我做了这个:

post http://address.com?key=As8941a1891389123812312381923 并在 body 中将 json 设为 RAW 格式。在 header 上,我只是放了一个 Content-type application/json,它工作正常。

在 openge 中我试过这个:

oJson = new JsonObject;
oJson:add('...blablabla',payloadData).
assign cURL = 'http://address.com?key=As8941a1891389123812312381923'.
oHttpClient = ClientBuilder:Build():Client.
Assign oRequest = RequestBuilder:Post(cURL,oJson)
                  :Content-type('application/json')
                  :AcceptJson()
                  :Request.
Assign oResponse = oHttpClient:Execute(oRequest).

但是,我从服务器收到 403 错误。 似乎问题是当我尝试同时发送带有 URL 和 json 有效载荷的 ?key=xxxx 参数时,或者,我在 cUrl 格式中犯了一个错误。

在我制作的其他类型的 post 中(并且工作正常)没有 json 有效负载,当有一些参数时,通常我必须单独发送参数,如下所示:

ASSIGN id = trim("db=" + trim(db) + "&lg=" + trim(lg) + "&sh=" + trim(sh) + 
"&sxml=" +      trim(argumentos)) 

htmlRequest = trim(id).
oRequestBody = new String(htmlRequest).

oRequest  = RequestBuilder:Post(trim(cURL),oRequestBody)
            :AcceptHtml()
            :Request.
oResponse = ClientBuilder:Build():Client:Execute(oRequest).

如何使用 openedge RequestBuilder 同时发送参数“?key=....”和 json 负载?

有什么body可以帮忙吗?

提前致谢

我已经检查了您的请求 - 有和没有 JSON 实体 - 在这两种情况下查询字符串都是 POST.

的一部分

我现在使用的是 OpenEdge 12.2,结果是:

POST /?key=As8941a1891389123812312381923 HTTP/1.1
Host: address.com
Content-Type: application/json
Content-Length: 16
Accept: application/json

{"blablabla":42}

这是我的测试例程:

BLOCK-LEVEL ON ERROR UNDO, THROW.

USING OpenEdge.Core.*                    FROM PROPATH .
USING OpenEdge.Net.*                     FROM PROPATH .
USING OpenEdge.Net.HTTP.*                FROM PROPATH .
USING OpenEdge.Net.HTTP.Filter.Writer.*  FROM PROPATH .
USING OpenEdge.Net.HTTP.Filter.Payload.* FROM PROPATH .
USING Progress.Json.ObjectModel.*        FROM PROPATH .

DEFINE VARIABLE oJson                    AS JsonObject NO-UNDO .
DEFINE VARIABLE cUrl                     AS CHARACTER NO-UNDO.
DEFINE VARIABLE oHttpClient              AS IHttpClient NO-UNDO .
DEFINE VARIABLE oRequest                 AS IHttpRequest NO-UNDO .
DEFINE VARIABLE oMessageBody             AS ByteBucket NO-UNDO .
DEFINE VARIABLE oBodyWriter              AS MessageWriter no-undo.
DEFINE VARIABLE cRequest                 AS CHARACTER NO-UNDO.

/* ***************************  Main Block  *************************** */

oJson = NEW JsonObject() .
oJson:Add ('blablabla', 42).
ASSIGN cURL = 'http://address.com?key=As8941a1891389123812312381923'.

oHttpClient = ClientBuilder:Build():Client.

ASSIGN oRequest = RequestBuilder:Post(cURL,oJson)
                  :ContentType('application/json')
                  :AcceptJson()
                  :Request

       oMessageBody = NEW ByteBucket()

       oBodyWriter = RequestWriterBuilder:Build(oRequest)
                            :WriteTo(oMessageBody)
                            :Writer.

oBodyWriter:Open().
/* writes the message's contents into the message body */
oBodyWriter:Write(oRequest).
oBodyWriter:Close().

cRequest = GET-STRING(oMessageBody:GetBytes():Value, 1) .

MESSAGE cRequest VIEW-AS ALERT-BOX .