0

West Wind 有一份文件说您可以使用 application/json 格式发布数据:

https://west-wind.com/webconnection/docs/_2110q21c9.htm

但是在使用它时,实际上它会做一个 http get 而不是 post:

DO wwhttp
oHTTP=CREATEOBJECT("wwHttp")
oHTTP.nHTTPPostMode = 8 oHttp.cContentType = "application/json" oHTTP.AddPostKey("name","somename") lcURL = " https://mywebserver.com/ " lcXML = oHTTP.HTTPGet(lcURL)

如果使用 nHTTPPostMode = 1 或 2,则 http 请求参数未正确格式化为 json。如果我更改为 4,它将再次使用 Get 而不是 Post。有没有办法解决这个问题?

4

1 回答 1

1

当您发布 JSON 数据时,您需要发布 JSON文档而不是像您在示例中所做的键值对。本质上,您需要提供要发送到服务器的完整内容——整个 JSON 文档作为字符串(就像示例所示)。

要发布 JSON 文档,如下所示:

DO wwHttp

oHTTP=CREATEOBJECT("wwHttp")
oHttp.cContentType = "application/json"

lcJson = "{ name: 'somename' }"
oHTTP.AddPostKey(lcJson)  && this sets the entire post buffer

lcURL = "https://mywebserver.com/" 
lcJson = oHTTP.HTTPGet(lcURL)

使用名称值对仅适用于 URLEncoded 或 Multipart 文档的 POST 缓冲区——所有其他类型的内容都作为您必须提供的原始数据发送。

在版本 6 及更高版本中,您还可以对.Post数据使用以下更简单的语法:

oHttp.cContentType = "application/json"
lcJson = oHttp.Post(lcUrl, lcJson)

如果您想在程序控制下创建 JSON 文档,您可以使用wwJsonSerializer 类(也是客户端工具的一部分)序列化数据。它可以从对象、数组/集合和游标序列化。

于 2015-03-16T08:56:27.480 回答