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

  • 相关阅读:
    Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0
    Codeforces 294C 组合数学
    Educational Codeforces Round 40 (Rated for Div. 2)
    第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛
    天梯赛和蓝桥杯省赛训练
    莫队算法
    牛客练习赛13
    51NOD-1391 预处理dp
    AtCoder Regular Contest 092
    大二下学期赛季
  • 原文地址:https://www.cnblogs.com/railgunman/p/10287712.html
Copyright © 2011-2022 走看看