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';