delphi TNetHTTPCleint提交JSON串


本文整理自网络,侵删。

 

这里,我们拿友盟的推送接口做个测试,它是要求同时提交get参数和post参数,post参数内容为json串,需要引用DateUtils和md5算法单元,代码如下:

procedure TForm1.Button3Click(Sender: TObject);

var

  vHttp: TNetHTTPClient;

  vS, vR: TStringStream;

  appkey, ams, timestamp, method, url, body, md5: string;

begin

  vHttp := TNetHTTPClient.Create(nil);

  vS := TStringStream.Create('', TEncoding.UTF8);

  vR := TStringStream.Create('', TEncoding.UTF8);

  try

    with vHttp do

    begin

      ConnectionTimeout := 2000; // 2秒

      ResponseTimeout := 10000; // 10秒

      AcceptCharSet := 'utf-8';

      AcceptEncoding := '65001';

      AcceptLanguage := 'zh-CN';

      ContentType := 'application/json';

      UserAgent := 'Embarcadero URI Client/1.0';

      appkey := '您的AppKey';

      ams := '您的App Master Secret';

      timestamp := FloatToStr(DateTimeToUnix(now, False));//返回unix时间戳

      method := 'POST';

      url := 'http://msg.umeng.com/api/send';

      body := '{"appkey":"' + appkey + '",'

        + '"timestamp":"' + timestamp + '",'

        + '"type":"customizedcast",'

      // +'"device_tokens":"",'

        + '"alias_type": "别名类型",'

        + '"alias":"别名1,别名2",'

        + '"payload":{"aps":{"alert": "您好!祝您生活愉快!'

        + '","badge":1,"sound":"default"}},'

        + '"description": "测试"}';

      vS.WriteString(method + url + body + ams);//友盟要求的签名算法

      md5 := LowerCase(MD5Print(MD5Stream(vS)));//签名要用md5输出,小写32位

      vS.Clear;

      vS.WriteString(body);

      vS.Position := 0;

      try

        Post(url + '?sign=' + md5, vS, vR);//拼接url并进行post提交

        Memo1.Lines.Add('post:' + vR.DataString);

      except

        on E: Exception do

          // Error sending data: (12002) 操作超时.

          // Error receiving data: (12002) 操作超时

          if Copy(E.Message, 1, Pos(':', E.Message) - 1) = 'Error sending data'

          then

            Memo1.Lines.Add('post:连接失败!')

          else if Copy(E.Message, 1, Pos(':', E.Message) - 1) = 'Error receiving data'

          then

            Memo1.Lines.Add('post:接收失败,请延长接收超时时间!')

          else

            Memo1.Lines.Add('post:' + E.Message);

      end;

    end;

  finally

    vS.Free;

    vR.Free;

    vHttp.Free;

  end;

end;

其实就是按流的形式进行提交就可以了,和拼接xml去post请求soap接口是一个道理。

 

https://www.offeu.com/www/index_id_173.html

相关阅读 >>

Delphi adoquery添加用户及密码

Delphi的字符截取函数leftstr,midstr,rightstr的介绍以及字符串拆分

如何访问局域网的access数据库

Delphi 如何将字符串中的半角字符转换为全角字符

Delphi android / ios应用程序中使用tgeocoder类进行反向地理编码(从位置信息中获取地址)

Delphi firedac数据库引擎连接mysql

Delphi 查询某个字符在字符串出现的位置,支持查找次数

Delphi一些排序算法

Delphi-获取毫秒-计算代码运行的时间

Delphi中destroy, free, freeandnil, release用法和区别

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...