如何使用openedge requestBuilder同时使用param和json负载生成http post

如何使用openedge requestBuilder同时使用param和json负载生成http post,post,httpclient,openedge,progress-4gl,Post,Httpclient,Openedge,Progress 4gl,我需要用参数和json负载向url发送帖子。 例如,在《邮递员》中,我做了这样一个: posthttp://address.com?key=As8941a1891389123812312381923并在正文中以原始格式放置json。在标题上,我只放了一个内容类型application/json,它工作得很好 在openedge中,我尝试了以下方法: oJson = new JsonObject; oJson:add('...blablabla',payloadData). assign cURL

我需要用参数和json负载向url发送帖子。 例如,在《邮递员》中,我做了这样一个:

posthttp://address.com?key=As8941a1891389123812312381923
并在正文中以原始格式放置json。在标题上,我只放了一个内容类型application/json,它工作得很好

在openedge中,我尝试了以下方法:

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错误。 问题似乎是当我试图同时发送?key=xxxx参数和URL以及json负载时,或者,我在cUrl格式中犯了一个错误

在我没有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负载

有人能帮忙吗


提前感谢

我已经检查了您的请求-有JSON实体和没有JSON实体-在这两种情况下,查询字符串都是帖子的一部分

我现在正在使用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 .

您的负载是有效的json负载吗?如果您将调试级别设置为5,则原始请求和响应将导出到您的临时目录-将它们与您通过Postman发送的内容进行比较。尽管我的OpenEdge是11,6(有些东西不起作用),但使用部分代码运行正常。非常感谢。