如何在 Ballerina 的 POST 请求中发送表单数据?

How to send form data in a POST request in Ballerina?

我想通过 POST 请求发送表单数据。我已尝试设置 headers 并设置有效负载。

req.setPayload("text=you are amazing");
req.addHeader("content-type","application/x-www-form-urlencoded");

结果为,

{message:"Entity body is not json compatible since the received content-type is : text/plain", cause:null}

使用setStringPayload方法时,

req.setStringPayload("text=you are amazing");
req.addHeader("content-type","application/x-www-form-urlencoded");

出现如下错误

error: senuri/sms-sender:1.0.0/sms_sender.bal:72:5: undefined function 'setStringPayload' in struct 'ballerina/http:Request'

我在 Ubuntu 16.04 和 Ballerina 0.975.0

有什么建议吗?

出现以下错误的原因是未正确覆盖内容类型。

{message:"Entity body is not json compatible since the received content-type is : text/plain", cause:null}

setPayload方法通过方法参数推断payload的类型,并设置各自的默认参数。本例中payload是string类型,所以content-type设置为text/plain。 addHeader 方法不会替换现有的 header 值,因为它只是为特定的现有 header 名称添加另一个条目。

由于优先考虑第一个实体 content-type 仍然是 text/plain。解决方案是使用 setHeader 替换现有的 header 值。

req.setPayload("text=you are amazing");
req.setHeader("Content-type","application/x-www-form-urlencoded");

关于第二个查询,setStringPaylaod 重命名为setTextPaylaod。所以使用下面的代码,可以发送表单数据。覆盖 content-type 很重要,因为通过 setTextPaylaod 设置负载的默认内容类型是 text/plain.

req.setTextPayload("text=you are amazing");
req.setHeader("Content-type","application/x-www-form-urlencoded");

getFormParams 方法可用于将参数作为映射检索。