如何使用openedge requestBuilder同时使用param和json负载生成http post
我需要用参数和json负载向url发送帖子。 例如,在《邮递员》中,我做了这样一个:如何使用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
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(有些东西不起作用),但使用部分代码运行正常。非常感谢。