出現這種問題的原因是由於訪問的 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)版本文件。
