httpf发送 json_https和http的post发送总结

本文为转贴内容,感谢作者阿进!

需要转发数据到客户的https的服务器上出现一系列问题总结如下:

1.因为是https首先考虑到用最新的控件NetHTTPClient(只有在XE8以上才有)。

2.客户的服务器需要先登录

例如:域名/authentication?account=admin&password=001

Method:  POST

return:

200:成功

404:不存在

606:自定义错误

3.登录成功后需要向下面地址提交json数据

URL:域名/measVals/batch

Method:POST

4.代码

varJsonstr:ansistring;

Url,ResData:string;

ResponseStream:TStringStream;

resStr:integer;

HTTPRespone:IHTTPResponse;//THTTPResponse;

ss : TMemoryStream;beginNetHTTPClient1.AllowCookies:=true;with NetHTTPClient1 do

begin

//AcceptCharSet := 'utf-8';

ConnectionTimeout := 2000; //2秒

ResponseTimeout := 10000; //10秒

AcceptEncoding := 'UTF-8';

AcceptEncoding := '65001';

AcceptLanguage := 'zh-CN';

ContentType := 'application/json; charset=utf-8';//'multipart/form-data';//'application/json';

//UserAgent := 'Embarcadero URI Client/1.0';

//UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)';//'Embarcadero URI Client/1.0';

end;

ResponseStream := TStringStream.Create;

ss := TMemoryStream.Create();//登录

Url:='https://域名.com/platform/authentication?account=admin&password=001';

HTTPRespone:=NetHTTPClient1.Post(Url,ss,ResponseStream);

memo1.Lines.Add(ResponseStream.DataString);//提交数据

Url:='https://域名.com/platform/measVals/batch';

Jsonstr:='{"tourId":"0","st":"MOBILE","mu":[{"num":"12345678","man":"test",'+

'"med":"07", "ver":"0","measCur":[ { "time":"1555050716", "volume": { "unit":"m",'+

'"value":"13" } }] }] }';

ss.Write(Jsonstr[1], Length(Jsonstr));

ss.Position := 0;

resStr:=NetHTTPClient1.Post(Url,ss,ResponseStream).StatusCode;

memo1.Lines.Add(ResponseStream.DataString);end;

5.需要注意的问题

(1)因为本例中登录后需要记录session,开始测试用的dXE10.1,始终记录不了session,后来查了网络知道是该版本的bug,后来换用最新的XE10.3才可以NetHTTPClient1.AllowCookies:=true;

(2)提交json数据开始用TStringStream向对方提交数据,对方始终收到的是空,后来改用TMemoryStream才可以收到,并且json数据要用Jsonstr:ansistring;  否则对方收到的长度只有一半。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值