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

需要转发数据到客户的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 := ; // 2秒

    ResponseTimeout := ; // 10秒

    AcceptEncoding := 'UTF-8';

    AcceptEncoding := '';

    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[], Length(Jsonstr));

   ss.Position := ;

   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;  否则对方收到的长度只有一半。

https和http的post发送总结的更多相关文章

  1. ASP.NET通过http/https的POST方式,发送和接受XML文件内容

    本文转载:http://hi.baidu.com/ysyhyt/item/5011ae39ce3cf49fb80c0395 本文参考:http://blog.csdn.net/ououou123456 ...

  2. 【转载】JMeter学习(三十六)发送HTTPS请求

    Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试.由于在云阅读接口测试的过程中需要进行登录操作,而登录请求是HTTPS协议.这就需要对jmeter进行设置. ...

  3. JMeter学习(三十六)发送HTTPS请求(转载)

    转载自 http://www.cnblogs.com/yangxia-test Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试.由于在云阅读接口测试的过程 ...

  4. Vert.x(vertx)发送 HTTP/HTTPS请求

    Vert.x Web服务有两种协议,一种是HTTP,另外一种是使用ssl的HTTPS,请求的方式有五种,分别是get.post.put.delete.head.为了简单,服务端主要实现对HTTP协议的 ...

  5. http协议(十一)http与https

    一.http的缺点 之前有介绍过http协议相关的一些知识,http是相当优秀和方便的,但它也有缺点,主要不足表现在如下几个方面: △ 通信使用明文(不加密),内容可能会被窃听 △ 不验证通信方的身份 ...

  6. HTTPS和HTTP的区别

    (转自:http://www.php100.com/html/it/biancheng/2015/0209/8582.html) 总的来说,http效率更高,https安全性更高. 首先谈谈什么是HT ...

  7. 听大神说:https和http有何区别?(转)

    在做雅虎的时候,发现用第三方工具截取不到客户端与服务端的通讯,以前重来没碰到过这种情况,仔细看了看,它的url请求时基于https的,gg了下发现原来https协议和http有着很大的区别.总的来说, ...

  8. 理解 HTTPS 的工作原理

    目标读者:理解HTTP协议,对称和非对称加密,想要了解HTTPS协议的工作原理. 读完本文,你能明白 什么是HTTPS,TLS(SSL),TLS和HTTPS是什么关系? 什么是证书和数字签名,它们是如 ...

  9. requests模块--python发送http请求

    requests模块 在Python内置模块(urllib.urllib2.httplib)的基础上进行了高度的封装,从而使得Pythoner更好的进行http请求,使用Requests可以轻而易举的 ...

随机推荐

  1. Event事件与协程

    1.Event事件 Event事件的作用: - 用来控制线程的执行. - 由一些线程去控制另一些线程. 2.进程池与线程池 1)什么是进程池与线程池? 进程池与线程池是用来控制当前程序允许创建(进程/ ...

  2. Selenium 2自动化测试实战40(单线程)

    单线程 #onethread.py #coding:utf-8 from time import sleep,ctime #听音乐任务 def music(): print('i was listen ...

  3. Selenium 2自动化测试实战32(Fixtures)

    Fixtures fixtures可以形象地把它看作是夹心饼干外层的两片饼干,这两片饼干就是setUp/tearDown,中间的心就是测试用例.除此之外,unittest还提供了更大范围的fixtur ...

  4. Qt编写自定义控件19-图片背景时钟

    前言 图片背景时钟控件,是全套控件(目前共145个)中唯一的几个贴图的控件,这个背景要是不贴图,会画到猝死,必须用美工做好的图贴图作为背景,此控件以前学C#的时候写过,后面在写Qt控件的过程中把他移植 ...

  5. elk报错解决

    .elasticsearch启动失败如下: [root@bogon home]# /home/elasticsearch-/bin/elasticsearch [--11T07::,][WARN ][ ...

  6. JRebel for IntelliJ

    好久没用jrebel了,跟前端进行项目联调总是有些许改动,还是热部署方便. 目前用的idea版本:IntelliJ IDEA 2019.2 JRebel插件版本:JRebel for IntelliJ ...

  7. 无法从路径’NuGet.CommandLine.2.7.1.nupkg’读取包

    visual-studio-2010或者2013 – 在启用Nuget包恢复时出现奇怪的Nuget错误 我右键单击我的VS2010中的解决方案文件并单击Enable NuGet Package Res ...

  8. CSRF类型

    按照请求类型来区分.分为:GET类型和POST类型 按照攻击类型分类,CSRF可分为:HTML CSRF攻击,JSOM HiJacking攻击和FIash CSRF攻击 HTML CSRF攻击 HTM ...

  9. 【VS开发】recv函数函数返回值说明(特别有利于工程调试)

    recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据. ...

  10. NDK学习笔记-C语言

    本文简要回顾了C语言的一些注意事项和理解细节,不再赘述C语言的所有语法 头文件 头文件作为引入文件,在编译的时候,加载到源代码,参与编译 在VS2013中可以看到,当引入头文件时候,只能看到函数的声明 ...