0

application/json 形式を使用してデータを投稿できるという West Wind のドキュメントがあります。

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

しかし、それを使用する場合、実際には post の代わりに http get を実行します:

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 に変更すると、Post の代わりに Get が再び使用されます。とにかくこれを回避する方法はありますか?

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)

名前と値のペアの使用は、URL エンコードまたはマルチパート ドキュメントの POST バッファーでのみ機能します。他のすべてのタイプのコンテンツは、提供する必要がある生データとして送信されます。

バージョン 6 以降では、次のより単純な構文を.Postデータに使用することもできます。

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

プログラム制御下で JSON ドキュメントを作成する場合は、wwJsonSerializer クラス(これもクライアント ツールの一部) を使用してデータをシリアル化できます。オブジェクト、配列/コレクション、およびカーソルからシリアル化できます。

于 2015-03-16T08:56:27.480 に答える