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


    开篇:公司之前一直使用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

  • 相关阅读:
    一、服务器控件生命周期
    ArcGIS中的Analysis Tool中的Overlay
    谓词和操作
    联接基础知识SQL中
    修改windows右键菜单
    二、服务器控件的呈现
    连接池
    数据库中的NULL(空值)
    有关在SQL中使用函数
    锁的概述及例子讲解(转贴)
  • 原文地址:https://www.cnblogs.com/railgunman/p/10287712.html
Copyright © 2020-2023  润新知