• 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.代码

    var
    
      Jsonstr:ansistring;
    
      Url,ResData:string;
    
      ResponseStream:TStringStream;
    
      resStr:integer;
    
      HTTPRespone:IHTTPResponse;//THTTPResponse;
    
      ss : TMemoryStream;
    
    begin
    
      NetHTTPClient1.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;  否则对方收到的长度只有一半。

     

  • 相关阅读:
    导出预设体的缩略图工具
    FairyGui自动生成Wnd工具(Unity)
    Unity骨骼优化(转)
    顶点处理机制
    面向对象
    文件读取
    协同程序
    元表
    模块与包
    Lua表
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/10842780.html
Copyright © 2020-2023  润新知