1. type
  2. TwmsThreadpostJson = class(TThread)
  3. private
  4. Furl: string;
  5. Fpostcmd: string;
  6. FResult: string;
  7. FBOOL: Boolean;
  8. protected
  9. procedure Execute; override;
  10. end;
  11.  
  12. class function TWmsApplicationfunction.postjson(url, postcmd: string): string;
  13. var
  14. FThread: TwmsThreadpostJson;
  15. begin
  16. if booleanshowflash then
  17. cxSetSplashVisibility(Application.MainForm <> nil, '');
  18. try
  19. FThread := TwmsThreadpostJson.Create;
  20. FThread.Furl := url;
  21. FThread.Fpostcmd := postcmd;
  22. FThread.FBOOL := False;
  23. FThread.Resume;
  24.  
  25. while true do
  26. begin
  27. Application.ProcessMessages;
  28. if FThread.FBOOL then //等待子线程执行完毕
  29. begin
  30. cxSetSplashVisibility(False, '');
  31. Result := FThread.FResult;
  32. FThread.Free;
  33. Break;
  34. end;
  35. end;
  36. except
  37.  
  38. end
  39.  
  40. procedure TwmsThreadpostJson.Execute;
  41. var
  42. strStream: TStringStream;
  43. strStream1: TStringStream;
  44. IdHTTP: Tidhttp;
  45. AJson: TQJson;
  46. passuess: boolean;
  47. strData: string;
  48. Strtemp: string;
  49. strRadom: string;
  50. strDes: string;
  51. pub, pri: TFGInt;
  52. begin
  53. Fresult := '';
  54. IdHTTP := Tidhttp.create(nil);
  55. try
  56. IdHTTP.Request.CustomHeaders.clear;
  57. IdHTTP.Request.RawHeaders.values['Cookie'] := yundawms.returncookek;
  58. IdHTTP.HandleRedirects := true;
  59. IdHTTP.Request.CustomHeaders.Add('Cookie: ' + yundawms.returncookek);
  60. IdHTTP.Request.Connection := 'Keep-Alive';
  61. IdHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)';
  62. // IdHTTP.Request.ContentType:='application/x-www-form-urlencoded;charset=UTF-8';
  63. IdHTTP.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*';
  64. IdHTTP.Request.AcceptLanguage := 'zh-cn';
  65. IdHTTP.Request.AcceptEncoding := 'gzip, deflate';
  66. IdHTTP.Request.CacheControl := 'no-cache';
  67. IdHTTP.ReadTimeout := ;
  68. IdHTTP.ConnectTimeout := ;
  69. IdHTTP.Request.ContentType := 'application/json;charset=UTF-8';
  70. IdHTTP.Request.AcceptCharSet := 'UTF-8';
  71. IdHTTP.Request.AcceptEncoding := 'UTF-8';
  72. IdHTTP.Request.AcceptLanguage := 'UTF-8';
  73. IdHTTP.Request.CharSet := 'UTF-8';
  74. // IdHTTP1.CookieManager := IdCookieManager1;
  75. IdHTTP.HTTPOptions := IdHTTP.HTTPOptions + [hoKeepOrigProtocol]; // 关键这行
  76. IdHTTP.ProtocolVersion := pv1_;
  77. AJson := TQJson.Create;
  78. passuess := false;
  79. try
  80. AJson.Parse(Fpostcmd);
  81. if Assigned(AJson.ItemByPath('username')) then
  82. AJson.ItemByPath('username').value := Tyundawms.getwmsuser;
  83. Strtemp := inttostr(ConvertDelphiDateTimeToJavaDateTime(now));
  84. try
  85. AJson.AddVariant('dateTime', Strtemp);
  86. except
  87.  
  88. end;
  89.  
  90. strData := Tyundawms.getwmsuser + Tyundawms.getwmspassword + Strtemp;
  91. AJson.AddVariant('validation', TWmsApplicationfunction.Getmd5(strData));
  92. passuess := true;
  93. Fpostcmd := AJson.AsString;
  94. if passuess = true then
  95. strStream := TStringStream.create(Fpostcmd, TEncoding.UTF8)
  96. else
  97. exit;
  98. finally
  99. AJson.Free;
  100. end;
  101. try
  102. yundawms.AppService.GeneralUtility.retmain('log:post' + ' url:' + Furl + ' date:' + Fpostcmd);
  103. except
  104. // raise Exception.Create('postjson:记录日志异常!');
  105. end;
  106.  
  107. strStream1 := TStringStream.create('', TEncoding.UTF8);
  108. try
  109. IdHTTP.Post(Furl, strStream, strStream1);
  110. Fresult := strStream1.DataString;
  111.  
  112. Fresult := StringReplace(Fresult, '\u008F', '', [rfReplaceAll]); //含有的特殊字符 替换为空
  113. Fresult := StringReplace(Fresult, '\u00A0', ' ', [rfReplaceAll]); //含有全角字符替换 全角字符会乱码
  114. except
  115. raise Exception.Create('postjson:服务器链接失败,请检查【网络】是否正常!');
  116. Fresult := '';
  117. end;
  118.  
  119. try
  120. yundawms.AppService.GeneralUtility.retmain('log:get' + ' url:' + Furl + ' resultdate:' + Fresult);
  121. except
  122. end;
  123. finally
  124. IdHTTP.Disconnect;
  125. if Assigned(IdHTTP) then
  126. freeandnil(IdHTTP);
  127. if Assigned(strStream) then
  128. freeandnil(strStream);
  129. if Assigned(strStream1) then
  130. freeandnil(strStream1);
  131. FBOOL := True;
  132. end;
  133. end;

转:https://www.cnblogs.com/yangxuming/p/8086779.html

delphi Tidhttp 发送json格式报文的更多相关文章

  1. 利用 CURL 发送JSON格式字符串

    /* * post 发送JSON 格式数据 * @param $url string URL * @param $data_string string 请求的具体内容 * @return array ...

  2. idHTTP 向网站发送json格式数据

    idHTTP 向网站发送json格式数据 var rbody:tstringstream; begin rbody:=tstringstream.Create('{"name":& ...

  3. 如何使用python内置的request发送JSON格式的数据

    使用步骤如下: 一.如果想发送json格式的数据,需要使用request模块中的Request类来创建对象,作为urlopen函数的参数 二.header中添加content-type为applica ...

  4. 巧妙的使用jmeter来发送json格式数据

    1. header-manager 修改content-type值. 如果不修改该值, 则默认会是urlencode的数据格式(例如a=5&b=6). 修改为json后,会告诉服务器,发送的数 ...

  5. ajax发送json格式与文件数据、django自带的序列化器(了解)

    上期内容回顾 聚合查询和分组查询 # 聚合查询 max min sum avg count # 查询关键字:aggregate from django.db.models import Max, Mi ...

  6. linux c 使用socket 发送http请求 可以发送json格式数据

    #include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <time.h ...

  7. 通过http协议发送json格式请求并解析

    本人初入门径.代码略显粗糙,欢迎指点改正! 最近在做公司的项目的时候,需要和其他公司进行业务上的对接,对方直接扔过来一个协议用来开发,最近稍微看了一下,写了一个通过协议获取数据的方法 对方的协议内容部 ...

  8. 模拟一个http 请求的json格式报文,带 rsa 签名操作

    一.对需要加密的字符串,定义RsaSignUnsign 类,代码如下: 实现了: 1.实现了生成新的pubkey.pri_key方法: 2.将新生成的keys 写入文件: 3.从文件获取pubkey. ...

  9. java请求POST发送json格式请求

    public static String upload(String url){ try { HttpClient httpclient = new DefaultHttpClient(); Http ...

随机推荐

  1. 为什么linux系统中init被systemd替换了

    Linux init 进程是系统初始化进程,比较古老了,所以出现了一些新的替代方案: Upstart – A init replacement daemon implemented in Ubuntu ...

  2. shell脚本中set -e作用

    最近学习shell脚本想到一个问题,如果脚本中出现了一条异常语句,甚至可以影响整个脚本的使用,那么是否有一旦出现问题就可以及时停止的方法呢?在shell脚本中set命令就可以轻松实现.set命令的-e ...

  3. centos7服务搭建常用服务配置之二:Rsync+sersync实现数据实时同步

    目录 1.RSYNC数据备份 1.1 rsync服务简介 1.2 rsync特点和优势 1.3 rysnc运行模式简介 1.4 数据同步方式 2 Rsync实验测试 2.1 实验环境说明 2.2 服务 ...

  4. 《MIT 6.828 Lab 1 Exercise 12》实验报告

    本实验的网站链接:MIT 6.828 Lab 1 Exercise 12. 题目 Exercise 12. Modify your stack backtrace function to displa ...

  5. Vue框架下实现导入导出Excel、导出PDF

    项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...

  6. 使用mybatis出现异常:invalid comparison: java.time.LocalDateTime and java.lang.String

    整了半天终于找到问题所在:在mapper文件中,对该参数进行了和字符串的对比,如下: <if test="startTime != null and startTime != '' a ...

  7. EffectiveC++

    宁可以编译器替换预处理器 define 不被视为语言的一部分,因此也就有可能在预处理阶段被优化掉,导致相关变量出现错误. #define ASPECT_RATIO 1.63 //可以尝试将其替换为 c ...

  8. 牛客 26E 珂学送分2 (状压dp)

    珂...珂...珂朵莉给你出了一道送分题: 给你一个长为n的序列{vi},和一个数a,你可以从里面选出最多m个数 一个合法的选择的分数定义为选中的这些数的和加上额外规则的加分: 有b个额外的规则,第i ...

  9. 《深入理解 Java 虚拟机》学习 -- 类加载机制

    <深入理解 Java 虚拟机>学习 -- 类加载机制 1. 概述 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 J ...

  10. c#连接数据库SqlHelper报错

    这是一个困扰了我好几天的问题,首先看一下报错信息 代码: private static string connectionString = ConfigurationManager.Connectio ...