1. 程式人生 > >Delphi的idhttp報IOHandler value is not valid錯誤的原因

Delphi的idhttp報IOHandler value is not valid錯誤的原因

blog url ket tlsv1 shared 管理 dir not cts

出現這種問題的原因是由於訪問的 URL地址為https或存在其跳轉地址為https。

首先單純使用idhttp是只能訪問http,而https則需要搭配IdSSLIOHandlerSocketOpenSSL來實現對https的訪問支持,當然還需要在系統目錄或編譯目標程序的同目錄下有ssleay32.dll與libeay32.dll兩個SLL協議的支持庫。

下面貼出一個簡單示例,但對於需要管理cookie的自然要繼續完善idhttp的其他項設置,尤其是有些https站是屏蔽直接使用IdCookieManager的。

function TMyHttp.SSLGetS(URL: string): string;
var
  Http: TIdhttp;
  SSLIO: TIdSSLIOHandlerSocketOpenSSL;
begin
  Http := TIdHttp.Create(nil);
  Http.ProtocolVersion := pv1_1;
  Http.HandleRedirects := True;
  SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSLIO.SSLOptions.Method:=sslvTLSv1;
  SSLIO.SSLOptions.Mode := sslmClient;
  try
    try
      Http.IOHandler:=SSLIO;
      Result := Http.Get(URL);
    except
      Result := ‘‘;
    end;
  except

  end;
  Http.Disconnect;
  FreeAndNil(SSLIO);
  FreeAndNil(Http);
end;

我使用的是Delphi 2007,它最高僅支持Indy10.2.3版本,搭配前面提到的兩個OpenSLL Shared Library 1.0.1.5(1.0.1.e)版本文件。

Delphi的idhttp報IOHandler value is not valid錯誤的原因