USEGEAR

导航

TidHTTP的post编码,老掉牙的问题

TidHTTP使用post时,需要提交json字符串。

那么采用什么编码,这个问题就头大了。目前xe已经不要考虑编码转换问题。但是....

我们使用ISuperObject操控json。那么最后提交到post的数据应该是这样?

idHttp.post(urURL,stream)

idhtp1.Post('http://123.124.211.113:9050/myMoth',RequestBody);
==================================
RequestBody是StringStream,具体内容如下才能成功:
'{"biz_content":"{\"nurse_code\":\"230704100523655950\",\"nurse_name\":\"\u5f20\u65e9\u65e9\",\"org_id\": \"1681123936592465920\",\"delete_flag\":\"0\"}","time":"1695139471","sign":"CF8D24967B933104C7B9C74A22249CAB"}'

http接收到改请求数据后会转换成:
{"biz_content": "{\"nurse_code\":\"230704100523655950\",\"nurse_name\": \"张早早\",\"org_id\": \"1681123936592465920\",\"delete_flag\": \"0\"}",    "time": "1695139471",    "sign": "CF8D24967B933104C7B9C74A22249CAB"}
如此能成功post。

你问我怎么知道。

1、使用firefox安装restClient(?)扩展件。然后就可以如同postman一样进行提交数据,以确认正确的姿势。

 2、使用你的exe提交post,不知道数据长成什么样,不要紧使用这玩意抓包。

 

 核对你提交的数据。

最后确定你应该使用:

RequestBody := TStringStream.create(jo.asjson);//而不是jo.asString
tmpstr1 := idhtp1.Post('http://urMeth',RequestBody);
idhtp1.Request.ContentType :
= 'application/json'; idhtp1.Request.CustomHeaders.Values['secret'] := '1681123936592465920'; idhtp1.HandleRedirects := True; idhtp1.Request.ContentType := 'application/json'; idhtp1.Request.Accept := 'application/json';

 

posted on 2023-09-21 11:29  USEGEAR  阅读(206)  评论(0编辑  收藏  举报