• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Delphi]实现使用TIdHttp控件向https地址Post请求[转]

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

开篇:公司之前一直使用http协议进行交互(比如登录等功能),但是经常被爆安全性不高,所以准备改用https协议。百度了一下资料,其实使用IdHttp控件实现https交互的帖子并不少,鉴于这次成功实现了功能,在此总结分享给大家。

开发环境:XE2 + Indy10

https服务协议:使用Json格式交互参数

Delphi控件:TIdhttp,IdSSLIOHandlerSocketOpenSSL(原生控件)

关键DLL:libeay32.dll,ssleay32.dll

 

为了封装我自己的功能,控件是我自己创建自己释放的,下面列出主要代码。

首先,设置Idhttp控件的参数:

FIdHttp := TIdHTTP.Create(nil);
  IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  FIdHttp.IOHandler := IdSSLIOHandlerSocketOpenSSL;
  FIdHttp.HandleRedirects := True;
  FIdHttp.Request.ContentType := 'application/json';//设置交互方式为json格式

在这里IdSSLIOHandlerSocketOpenSSL.SSLOption.Method为默认值 sslvTLSv1(这个跟需要交互的HTTPS服务有关)。

其次就到交互了:

FHttpsURL是需要交互的HTTPS地址,aEnctryPost是需要提交的具体内容,使用流方式提交。

aEnctryPost内容举例:

 {"username":"test","password":"1"} 

postStream := TStringStream.Create(aEnctryPost);
  try
    postStream.Position := 0;
    AEnctryRespose := FIdHttp.Post(FHttpsURL, postStream);
    ShowMessage(AEnctryRespose);//post后的返回内容
  finally
    FIdHttp.Disconnect;
    FreeAndNil(postStream);
  end;

常见错误信息: 

Could not load SSL library:检查libeay32.dll,ssleay32.dll两个DLL的位置(一般放在exe同目录)、版本是否正确。

HTTP 1.1 / 415: 检查IdHttp.Request.ContentType := 'application/json' 这里设置的格式是否是要求的格式,有可能是XML格式。

转自:https://blog.csdn.net/yueyun889/article/details/79076664


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi 的内存操作函数(5): 复制内存发布时间:2022-07-18
下一篇:
delphi快捷键发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap