从Windows Server 2012 R2发送SSL HTTP请求

从Windows Server 2012 R2发送SSL HTTP请求,windows,delphi,ssl,Windows,Delphi,Ssl,我只在windows server 2012 R2版本中遇到问题。当我发送SSL GET请求时,我不会收到任何东西,甚至不会收到错误消息。我不知道它与DLL的兼容性是否有问题,我尝试了以下每个版本:。也许这就是我代码中的问题 procedure TForm5.FormCreate(Sender: TObject); var LJSONArray : TJSONArray; Temp : TStrings; IdSSL: TIdSSLIOHa

我只在windows server 2012 R2版本中遇到问题。当我发送SSL GET请求时,我不会收到任何东西,甚至不会收到错误消息。我不知道它与DLL的兼容性是否有问题,我尝试了以下每个版本:。也许这就是我代码中的问题

procedure TForm5.FormCreate(Sender: TObject);
    var
        LJSONArray : TJSONArray;
        Temp : TStrings;
        IdSSL: TIdSSLIOHandlerSocketOpenSSL;
        lHTTP: TIdHTTP;
        K : Boolean;
        pw : PwideChar;
    begin
      TThread.CreateAnonymousThread(procedure   () var  I :Integer;
        begin
          try
               Temp := TStringList.Create;
              lHTTP := TIdHTTP.Create(nil);
              IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
              lHTTp.ReadTimeout := 60000;
              IdSSL.SSLOptions.Method := sslvTLSv1_1;
              IdSSL.SSLOptions.Mode := sslmClient;
              lHTTP.IOHandler := IdSSL;
              lHTTP.HandleRedirects := True;
              LJSONArray := System.JSON.TJSONArray.Create;
              lhttp.Request.Accept := 'application/json, text/plain; q=0.9, text/html;q=0.8';
              lHTTP.Request.Host := 'baas.kinvey.com';
              lHTTP.Request.CustomHeaders.Values['Connection'] := 'Keep-Alive';
              lHTTP.Request.CustomHeaders.Values['Authorization'] :=  'Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
              LHTTP.Request.ContentType := 'application/x-www-form-urlencoded; charset=UTF-8';
              lHTTP.Request.UserAgent := 'Embarcadero RESTClient/1.0';
              Reply := lhttp.Get('https://baas.kinvey.com/appdata/kid_xxxxxTEst/');
              LJSONArray :=  TJSONObject.ParseJSONValue(Reply, True) as TJSONArray;
                 for I := 0 to LJSONArray.Count -1 do
                      begin
                            Temp.Add(LJSonArray.Items[I].GetValue<string>('KEY'));
                      end;
                LJSONArray.Free;
                             K := False;
                             PW := pChar(Temp.text);
                             K := ExistWordInString(PW,'YES',[soWholeWord,soDown]);
                           if K = True then
                           begin
                              TThread.Synchronize (TThread.CurrentThread,
                                        procedure ()
                                          begin
                                              Left:=(Screen.Width-Width)  div 2;
                                        end);
                                end;
                           if K = False then
                           begin
                              TThread.Synchronize (TThread.CurrentThread,
                                        procedure ()
                                        begin
                                        Form5.Caption := '';
                                        end);
                                        end;
            except on E :exception do
                  begin
                    TThread.Synchronize (TThread.CurrentThread,
                      procedure ()
                      begin
                      memo1.lines.add(E.Message);
                      end);
                  end;
                end;
     end).Start;
    end;
过程TForm5.FormCreate(发送方:TObject);
变量
LJSONArray:TJSONArray;
温度:t管柱;
IdSSL:TIdSSLIOHandlerSocketOpenSSL;
lHTTP:TIdHTTP;
K:布尔型;
pw:PwideChar;
开始
CreateAnonymousThread(过程()变量I:Integer;
开始
尝试
Temp:=TStringList.Create;
lHTTP:=TIdHTTP.Create(nil);
IdSSL:=TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
lHTTp.ReadTimeout:=60000;
IdSSL.SSLOptions.Method:=sslvTLSv1_1;
IdSSL.SSLOptions.Mode:=sslmClient;
lHTTP.IOHandler:=IdSSL;
lHTTP.HandleRedirects:=True;
LJSONArray:=System.JSON.TJSONArray.Create;
lhttp.Request.Accept:='application/json,text/plain;q=0.9,text/html;q=0.8';
lHTTP.Request.Host:=“baas.kinvey.com”;
lHTTP.Request.CustomHeaders.Values['Connection']:='Keep-Alive';
lHTTP.Request.CustomHeaders.Values['Authorization']:='Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
LHTTP.Request.ContentType:=“application/x-www-form-urlencoded;charset=UTF-8”;
lHTTP.Request.UserAgent:=“Embarcadero RESTClient/1.0”;
回复:=lhttp.Get('https://baas.kinvey.com/appdata/kid_xxxxxTEst/');
LJSONArray:=TJSONObject.ParseJSONValue(Reply,True)作为TJSONArray;
对于I:=0到LJSONArray.Count-1 do
开始
临时添加(LJSonArray.Items[I].GetValue('KEY');
结束;
LJSONArray.Free;
K:=假;
PW:=pChar(温度文本);
K:=ExistWordInString(PW,'YES',[soWholeWord,soDown]);
如果K=True,则
开始
TThread.Synchronize(TThread.CurrentThread,
程序()
开始
左:=(屏幕宽度)div 2;
(完),;
结束;
如果K=False,则
开始
TThread.Synchronize(TThread.CurrentThread,
程序()
开始
表格5.标题:='';
(完),;
结束;
E上除外:例外
开始
TThread.Synchronize(TThread.CurrentThread,
程序()
开始
备忘录1.行。添加(E.Message);
(完),;
结束;
结束;
结束)开始;
结束;

注意:该代码适用于除Win server 2012 R2之外的任何其他机器,因此我想知道这是SSL问题还是线程问题。是的,不幸的是,我没有Windows server 2012 R2,我尝试了Amazon的2012 R2免费服务器,但我成功了,这只发生在一些VPS中@ChrisReynolds
TIdSSLIOHandlerSocketOpenSSL
表示SSL实现使用OpenSSL而不是Schannel SSL实现。因此,在Windows 2012服务器R2上应该没有区别。如果OpenSSL库没有静态链接,或者防火墙正在阻止请求,则可能在该特定服务器上缺少OpenSSL库。您使用的是哪个版本的Indy?你必须从中得到一些东西。
TIdHTTP.Get()
将从服务器返回响应,或者在出错时引发异常,或者如果根本没有网络活动,它将简单地阻止调用线程直到超时。是哪一个?您需要调试代码。如果您无法在调试器中运行代码,因为您没有对相关操作系统进行hq测试,那么您需要更多日志记录、嗅探网络流量等。