出現這種問題的原因是由於訪問的 URL地址為https或存在其跳轉地址為https。 首先單純使用idhttp是只能訪問http,而https則需要搭配IdSSLIOHandlerSocketOpenSSL來實現對https的訪問支持,當然還需要在系統目錄或編譯目標程式的同目錄下有ssleay32. ...
出現這種問題的原因是由於訪問的 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)版本文件。