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 xe10 文件目录/路径操作 (andorid、ios、windows)

Delphi中实现全角转半角

Delphi获取进程占用内存

Delphi 使用钩子函数 - 钩子链和 callnexthookex 的返回值

Delphi listview基本用法大全

Delphi 获取计算机名和用户名

Delphi生成的webservice appdebug的程序,编译时出错

Delphi 如何判断clipboard剪切板中的内容的类型

Delphi monthcalendar1 获取选中日期

Delphi提取二值图像轮廓

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



打赏

取消

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

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

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

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

评论

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