具有Ssl连接超时10060的Delphi XE7 Indy Rest Api发布

时间:2018-08-09 14:38:45

标签: delphi ssl post indy idhttp

我正在尝试使用ssl地址服务发布消息,并且连接超时为10060。我的ssl库和Indy SSl配置是正确的,因为我在通过gmail和其他服务发送电子邮件时使用了相同的代码。

我与邮递员一起发布了它的作品。

我的代码

const
  Api = 'https://xxxx.xxxx.com/api/detection/Insert';

procedure TRestSender.SendThreats(CustomerId: Integer;
  DetectionName, Filename: String);
var
  PostData: TStringList;
  res: string;
  Https: TIdHttp;
  IdSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
  Https := Tidhttp.Create(nil);
  PostData := TStringList.Create;
  IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  Https.ReadTimeout := 10000;
  Https.ConnectTimeout:= 10000;

  IdSSL.SSLOptions.Method := sslvTLSv1;
  // IdSSL.OnStatusInfo:= ssl1StatusInfo;
  IdSSL.SSLOptions.Mode := sslmClient;
  Https.IOHandler := IdSSL;
  try
    PostData.Add('Content-Type:application/x-www-form-urlencoded');
    PostData.Add('CustomerId=' + IntToStr(CustomerId));
    PostData.Add('DetectionName=' + DetectionName);
    PostData.Add('DeviceName=' + ComputerName());
    PostData.Add('Filename=' + Filename);
    PostData.Add('ApiUser=' + 'some-code');
    PostData.Add('ApiPass=' + 'some-paswd');
    res := Https.Post(Api, PostData);
  finally
    PostData.Free;
    Https.Free;
    IdSSL.Free;
  end;
end;

1 个答案:

答案 0 :(得分:1)

我有两个建议:

  1. 错误的TLS版本:越来越多的服务禁用TLS 1.0和/或TLS1.1。默认版本是TLS 1.0。

    const
      DEF_SSLVERSION = sslvTLSv1;
      DEF_SSLVERSIONS = [sslvTLSv1];
    

    因此添加以下行:

    IdSSL.SSLOptions.SSLVersions := [sslvTLSv1_2, sslvTLSv1_1, sslvTLSv1];
    
  2. 缺少SNI支持(an example for SNI)。