zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    动词 + to do、动词 + doing
    图像直线检测——霍夫线变换
    x=min(x, y)
    x=min(x, y)
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    分治法求解切割篱笆
    分治法求解切割篱笆
    GMM的EM算法实现
    秒杀多线程第二篇 多线程第一次亲热接触 CreateThread与_beginthreadex本质差别
  • 原文地址:https://www.cnblogs.com/railgunman/p/10287712.html
Copyright © 2011-2022 走看看